Beispiel #1
0
        /// <summary>
        /// 解析客户端数据
        /// </summary>
        /// <param name="s_data"></param>
        static void ParseClientData(Client CT, string msg)
        {
            string data = msg;
            string type;

            try
            {
                type = data.Substring(0, 2);
            }
            catch
            {
                type = "";
            }
            string result = "";

            switch (type)
            {
            //注册
            case "RG":
                result = AccountManagement.getInstance().Register(data);
                CT.Send(result);
                break;

            //登录
            case "LG":
                result = AccountManagement.getInstance().Login(data);
                if (result.Split(' ')[1].CompareTo("S") == 0)
                {
                    CT.ID      = result.Split(' ')[2];
                    CT.isLogin = true;
                }
                CT.Send(result);
                break;

            //创建房间
            case "CR":
                RoomManagement.getInstance().Parse(CT, data);
                break;

            //进入房间
            case "ER":
                RoomManagement.getInstance().Parse(CT, data);
                break;

            //心跳
            case "HB":
                CT.updateTick(ServerFunction.getTimeStamp());
                break;

            case "":
                CT.isLink = false;
                break;

            default:
                break;
            }
        }
Beispiel #2
0
        /// <summary>
        /// 接收连接回调
        /// </summary>
        /// <param name="ar"></param>
        static void Callback_Accpet(IAsyncResult ar)
        {
            Socket t_socket   = (Socket)ar.AsyncState;
            Client new_Client = new Client();

            new_Client.isLink    = true;
            new_Client.socket    = t_socket.EndAccept(ar);
            new_Client.lastTick  = ServerFunction.getTimeStamp();
            new_Client.IPandPort = new_Client.socket.RemoteEndPoint.ToString();

            Console.WriteLine(new_Client.socket.RemoteEndPoint.ToString() + " 连接");
            new_Client.socket.BeginReceive(new_Client.data, 0, new_Client.data.Length, SocketFlags.None, new AsyncCallback(Callback_Receive), new_Client);
            ClientList.Add(new_Client);
            t_socket.BeginAccept(Callback_Accpet, t_socket);
        }
Beispiel #3
0
        /// <summary>
        /// 检查客户端心跳
        /// </summary>
        static void checkClient()
        {
            while (true)
            {
                for (int i = ClientList.Count - 1; i >= 0; i--)
                {
                    if (i >= ClientList.Count)
                    {
                        continue;
                    }

                    long t = ClientList[i].lastTick;
                    //超时
                    if (ServerFunction.getTimeStamp() - t > maxHeartBeatWaitTime || !ClientList[i].isLink)
                    {
                        CloseClient(ClientList[i]);
                    }
                }
                //Console.WriteLine("已连接:" + ClientList.Count);
                Thread.Sleep(100);
            }
        }
Beispiel #4
0
 /// <summary>
 /// 更新心跳
 /// </summary>
 /// <param name="msg"></param>
 /// <param name="player"></param>
 void ParseHeartbeat(string msg, PlayerData player)
 {
     player.client.updateTick(ServerFunction.getTimeStamp());
 }