示例#1
0
    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;
            }
        }
    }
示例#2
0
 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;
         }
     }
 }