private void Server_DataReceived(object sender, AsyncSocketEventArgs e) { if (tcpServer.isRunning) { LogTool.Log(e.msg); string remoteIpAddress = ((IPEndPoint)e.state.ClientSocket.RemoteEndPoint).Address.ToString(); string clientName = clientDic[remoteIpAddress]; switch (e.msg) { case NetworkCommand.HEART_BEAT: List <AsyncSocketState> clientList = new List <AsyncSocketState>(tcpServer.clientDic.Values); for (int i = 0; i < clientList.Count; i++) { if (clientList[i] != null) { if (e.state == clientList[i]) { tcpServer.clientDic[clientList[i].ClientSocket.RemoteEndPoint].isHeartBeated = true; } } } break; case NetworkCommand.EXIT: Loom.DispatchToMainThread(() => { KickByName(clientName); }); tcpServer.Close(e.state); break; default: LogTool.Log(clientDic[remoteIpAddress] + ":" + e.msg); break; } } }
private void CheckHeatBeat() { while (server.isRunning) { Loom.WaitForSeconds(ExitTime); if (server != null && server.clientDic != null && server.clientCount > 0) { foreach (var item in server.clientDic) { if (item.Value.isRunning) { if (!item.Value.CheckHeartBeat()) { server.Close(item.Value); } } } } else { return; } } }