コード例 #1
0
        //处理登录
        public void MsgLogin(Conn conn, ProtocolBase protoBase)
        {
            //获取数值
            int           start     = 0;
            ProtocolBytes protocol  = (ProtocolBytes)protoBase;
            string        protoName = protocol.GetString(start, ref start);
            string        username  = protocol.GetString(start, ref start);
            string        password  = protocol.GetString(start, ref start);
            string        strFormat = "[收到登录协议 ]" + conn.GetAddress();

            Console.WriteLine(strFormat + " 用户名: " + username + " 密码: " + password);
            //构建返回协议
            ProtocolBytes protocolRet = new ProtocolBytes();

            protocolRet.AddString("Login");
            //验证
            if (!ServerSQL.instance.CheckPassWord(username, password))
            {
                protocolRet.AddInt(-1);
                conn.Send(protocolRet);
                return;
            }
            //是否已经登录
            ProtocolBytes protocolLogout = new ProtocolBytes();

            protocolLogout.AddString("Logout");
            if (!Player.KickOff(username, protocolLogout))
            {
                protocolRet.AddInt(-1);
                conn.Send(protocolRet);
                return;
            }
            //获取玩家数据
            PlayerData playerData = ServerSQL.instance.GetPlayerData(username);

            if (playerData == null)
            {
                protocolRet.AddInt(-1);
                conn.Send(protocolRet);
                return;
            }
            conn.player      = new Player(username, conn);
            conn.player.data = playerData;
            //事件触发
            ServerTCP.instance.handlePlayerEvent.OnLogin(conn.player);
            //返回
            protocolRet.AddInt(0);
            conn.Send(protocolRet);
            ServerTCP.instance.ShowOnlineSQL(conn.player);
            return;
        }
コード例 #2
0
 //发送
 public void Send(Conn conn, ProtocolBase protocol)
 {
     byte[] bytes    = protocol.Encode();
     byte[] length   = BitConverter.GetBytes(bytes.Length);
     byte[] sendbuff = length.Concat(bytes).ToArray();
     try
     {
         conn.socket.BeginSend(sendbuff, 0, sendbuff.Length, SocketFlags.None, null, null);
     }
     catch (Exception e)
     {
         Console.WriteLine("[发送消息]" + conn.GetAddress() + ":" + e.Message);
     }
 }
コード例 #3
0
 public void Print()
 {
     Console.WriteLine("=============== Server login info ===============");
     for (int i = 0; i < conns.Length; i++)
     {
         Conn conn = conns [i];
         if (conn == null || conn.isUse == false)
         {
             continue;
         }
         string str = "[" + conn.GetAddress() + "] ";
         if (conn.player != null)
         {
             str += conn.player.id + " ";
         }
         Console.WriteLine(str);
     }
 }
コード例 #4
0
        //处理登出
        public void MsgLogout(Conn conn, ProtocolBase protoBase)
        {
            ProtocolBytes protocol = new ProtocolBytes();

            Console.WriteLine("[收到登出协议 ]" + conn.GetAddress() + "\n");
            protocol.AddString("Logout");
            protocol.AddInt(0);
            if (conn.player == null)
            {
                conn.Send(protocol);
                conn.Close();
            }
            else
            {
                conn.Send(protocol);
                conn.player.Logout();
            }
        }
コード例 #5
0
        /// <summary>
        /// Check all the conn and disconnect it which appear heartbeat.
        /// </summary>
        void HeartBeat()
        {
            long nowTime = Sys.GetTimeStamp();

            for (int i = 0; i < conns.Length; i++)
            {
                Conn conn = conns [i];
                if (conn == null || conn.isUse == false)
                {
                    continue;
                }

                if (nowTime - conn.lastTickTime > heartBeatTime)
                {
                    Console.WriteLine("[ServNet.HeartBeat] HeartBeat case disconnect with " + conn.GetAddress());
                    lock (conn) {
                        conn.Close();
                    }
                }
            }
        }
コード例 #6
0
 // Protocol: HeartBeat
 // Rec Args: None
 // Return: None
 public void MsgHeartBeat(Conn conn, ProtocolBase protoBase)
 {
     conn.lastTickTime = Sys.GetTimeStamp();
     Console.WriteLine("[HandleConnMsg.MsgHeartBeat] Update HeartBeat Time: " + conn.GetAddress() + " : " + conn.lastTickTime.ToString());
 }