diff --git a/SlnMesnac.TouchSocket/TcpServer.cs b/SlnMesnac.TouchSocket/TcpServer.cs index af5774e..fc3ecb7 100644 --- a/SlnMesnac.TouchSocket/TcpServer.cs +++ b/SlnMesnac.TouchSocket/TcpServer.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Logging; using System; +using System.Collections.Generic; using System.Text; using TouchSocket.Core; using TouchSocket.Sockets; @@ -10,6 +11,14 @@ namespace SlnMesnac.TouchSocket { private ILogger _logger; private readonly TcpService _service; + /// + /// 接收客户端指令委托 + /// + public delegate void ReceivedClientBuffer(byte[] buffer); + public event ReceivedClientBuffer? ReceivedClientBufferEvent; + + public delegate void RefreshClientInfo(TcpService tcpService); + public event RefreshClientInfo? RefreshClientInfoEvent; public TcpServer(ILogger logger,TcpService tcpService) { @@ -27,21 +36,23 @@ namespace SlnMesnac.TouchSocket }; _service.Connected = (client, e) => { _logger.LogInformation($"客户端{client.IP}接入服务成功"); + RefreshClientInfoEvent?.Invoke(_service); return EasyTask.CompletedTask; }; _service.Disconnected = (client, e) => { _logger.LogInformation($"客户端{client.IP}断开连接"); + RefreshClientInfoEvent?.Invoke(_service); return EasyTask.CompletedTask; }; _service.Received = (client, e) => { - //if (requestInfo is MyFixedHeaderRequestInfo myRequestInfo) - //{ - // string body = Encoding.UTF8.GetString(myRequestInfo.Body, 0, myRequestInfo.Body.Length); - //} //从客户端收到信息 var mes = Encoding.UTF8.GetString(e.ByteBlock.Buffer, 0, e.ByteBlock.Len);//注意:数据长度是byteBlock.Len - + + byte[] receivedBuffer = new byte[e.ByteBlock.Len]; + Array.Copy(e.ByteBlock.Buffer, 0, receivedBuffer, 0, e.ByteBlock.Len); + ReceivedClientBufferEvent?.Invoke(receivedBuffer); + return EasyTask.CompletedTask; }; @@ -60,10 +71,22 @@ namespace SlnMesnac.TouchSocket } catch (Exception ex) { - _logger.LogError($"TcpServer启动异常:{ex}"); - throw new Exception(ex.Message); + //throw new InvalidOperationException($"TcpServer启动异常:{ex.Message}"); + _logger.LogError($"TcpServer启动异常:{ex.Message}"); } } + + /// + /// 向所有客户端发送心跳 + /// + public void SendHeartBeat() + { + var clients = _service.SocketClients.GetClients(); + foreach (var item in clients) + { + _service.Send(item.Id,"heartbeat"); + } + } } } diff --git a/SlnMesnac.TouchSocket/TouchSocketSetup.cs b/SlnMesnac.TouchSocket/TouchSocketSetup.cs index 588bd9d..b300018 100644 --- a/SlnMesnac.TouchSocket/TouchSocketSetup.cs +++ b/SlnMesnac.TouchSocket/TouchSocketSetup.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Text; +using Microsoft.AspNetCore.Builder; using TouchSocket.Sockets; namespace SlnMesnac.TouchSocket @@ -16,5 +17,12 @@ namespace SlnMesnac.TouchSocket services.AddSingleton();//注册TouchSocket的服务 services.AddSingleton(); } + + public static IApplicationBuilder UseTouchSocketExtensions(this IApplicationBuilder app) + { + var _server = app.ApplicationServices.GetService(); + _server.Init(20108); + return app; + } } -} +} \ No newline at end of file