//处理登录 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; }
//发送 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); } }
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); } }
//处理登出 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(); } }
/// <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(); } } } }
// 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()); }