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($"收到加载命令:{loadFromFolderCommand.FolderPath}"); ModService.LoadFromPackage(loadFromFolderCommand.FolderPath).Forget(); break; case UninstallPackageCommand uninstallPackageCommand: BIT4Log.Log($"收到卸载命令:{uninstallPackageCommand.PackageName}"); var mod = ModService.Mods.SingleOrDefault(x=>x.PackageName == uninstallPackageCommand.PackageName); if (mod is null) { BIT4Log.Warning($"未找到包:{uninstallPackageCommand.PackageName}"); return; } ModService.UnLoad(mod); ModService.UnInstall(mod); break; default: BIT4Log.Log($"未知命令:{command}"); break; } } private void OnDestroy() { if (_broadcaster is not null) _broadcaster.Dispose(); } } }