using System.Net.WebSockets; using System.Text; using System.Text.Json; using Common; using LocalServer.Models; namespace LocalServer; public class LocalSyncServer { public StateHelpBase StateHelper; public Config? SyncConfig; /// /// 发布源连接 /// public readonly WebSocket LocalSocket; /// /// 发布源-缓冲区,存储数据 最大1MB /// public byte[] Buffer = new byte[1024 * 1024]; /// /// 发布目标-连接 /// public readonly ClientWebSocket RemoteSocket = new(); /// /// 发布开始时间 /// private readonly DateTime StartTime = DateTime.Now; /// /// 发布名称 /// public readonly string Name; /// /// 父工程,用于释放资源 /// public readonly LocalSyncServerFactory Factory; public LocalSyncServer(WebSocket socket, string name, LocalSyncServerFactory factory) { LocalSocket = socket; Name = name; Factory = factory; StateHelper = new LocalAuthorityState(this); } public async Task Start() { //最大1MB var buffer = new byte[1024 * 1024]; var receiveResult = await LocalSocket.ReceiveAsync( new ArraySegment(buffer), CancellationToken.None ); while (!receiveResult.CloseStatus.HasValue) { await LocalSocket.SendAsync( new ArraySegment(buffer, 0, receiveResult.Count), receiveResult.MessageType, receiveResult.EndOfMessage, CancellationToken.None ); receiveResult = await LocalSocket.ReceiveAsync( new ArraySegment(buffer), CancellationToken.None ); } Factory.RemoveLocalSyncServer(this); await LocalSocket.CloseAsync( receiveResult.CloseStatus.Value, receiveResult.CloseStatusDescription, CancellationToken.None ); } public async void LocalSocketSendMsg(object msgOb) { string msg = JsonSerializer.Serialize(msgOb); await LocalSocket.SendAsync( new ArraySegment(Encoding.UTF8.GetBytes(msg)), WebSocketMessageType.Text, true, CancellationToken.None ); } public async void RemoteSocketSendMsg(object msgOb) { string msg = JsonSerializer.Serialize(msgOb); var buffer = AESHelper.EncryptStringToBytes_Aes(msg); await RemoteSocket.SendAsync( buffer, WebSocketMessageType.Text, true, CancellationToken.None ); } public void Close() { } }