using System.Net.NetworkInformation; using System.Net.WebSockets; using System.Text; using Common; using Microsoft.AspNetCore.Mvc; namespace LocalServer.Controllers { public class LocalServerController(LocalSyncServerFactory factory) : ControllerBase { private readonly LocalSyncServerFactory Factory = factory; /// /// websoc 连接入口 /// /// /// [Route("/websoc")] public async Task WebsocketConnection(string Name) { if (HttpContext.WebSockets.IsWebSocketRequest) { try { if (Factory.GetServerByName(Name) == null) { var webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync(); var pipeLine = new WebSocPipeLine(webSocket, false); //必须在此保留连接的上下文,否则 websocket 就直接断了。。。微软 这个设计措不及防 await Factory.CreateLocalSyncServer( pipeLine, Name, new WebSocPipeLine(new ClientWebSocket(), true) ); } else { throw new Exception("LocalServer: 已经存在同名的发布正在进行!"); } } catch (Exception e) { HttpContext.Response.Body = new MemoryStream(Encoding.UTF8.GetBytes(e.Message)); HttpContext.Response.StatusCode = StatusCodes.Status406NotAcceptable; } } else { HttpContext.Response.StatusCode = StatusCodes.Status400BadRequest; } } // [Route("/macaddr")] // public string GetMacAddress() // { // NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces(); // string macaddrs = ""; // foreach (NetworkInterface nic in nics) // { // PhysicalAddress physicalAddress = nic.GetPhysicalAddress(); // macaddrs += physicalAddress.ToString() + ";"; // } // return macaddrs; // } // //TODO 是否在本地记载同步日志? } }