Net.Like.Xue.Tokyo/Assets/BITKit/Unity/Scripts/Mod/UnityWorkshopClient.cs

63 lines
1.7 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using BITKit.Net.LAN;
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace BITKit.Mod
{
public class UnityWorkshopClient : MonoBehaviour
{
[SerializeField] private int port;
private UdpBasedLanBroadcaster _broadcaster;
private void Start()
{
_broadcaster = new UdpBasedLanBroadcaster
{
Port = port
};
_broadcaster.OnReceive += OnReceive;
_broadcaster.StartListen();
}
private async void OnReceive(EndPoint arg1, byte[] bytes)
{
await UniTask.SwitchToMainThread();
if(destroyCancellationToken.IsCancellationRequested) return;
var command = BITBinary.ReadAsValue(bytes);
switch (command)
{
case LoadFromFolderCommand loadFromFolderCommand:
BIT4Log.Log<UnityWorkshopClient>($"收到加载命令:{loadFromFolderCommand.FolderPath}");
ModService.LoadFromPackage(loadFromFolderCommand.FolderPath).Forget();
break;
case UninstallPackageCommand uninstallPackageCommand:
BIT4Log.Log<UnityWorkshopClient>($"收到卸载命令:{uninstallPackageCommand.PackageName}");
var mod = ModService.Mods.SingleOrDefault(x=>x.PackageName == uninstallPackageCommand.PackageName);
if (mod is null)
{
BIT4Log.Warning<UnityWorkshopClient>($"未找到包:{uninstallPackageCommand.PackageName}");
return;
}
ModService.UnLoad(mod);
ModService.UnInstall(mod);
break;
default:
BIT4Log.Log<UnityWorkshopClient>($"未知命令:{command}");
break;
}
}
private void OnDestroy()
{
if (_broadcaster is not null)
_broadcaster.Dispose();
}
}
}