//登陆协议处理 public static void MsgLogin(ClientState c, MsgBase msgBase) { MsgLogin msg = (MsgLogin)msgBase; //密码校验 if (!DbManager.CheckPassword(msg.id, msg.pw)) { msg.result = 1; NetManager.Send(c, msg); return; } //不允许再次登陆 if (c.player != null) { msg.result = 1; NetManager.Send(c, msg); return; } //如果已经登陆,踢下线 if (PlayerManager.IsOnline(msg.id)) { //发送踢下线协议 Player other = PlayerManager.GetPlayer(msg.id); MsgKick msgKick = new MsgKick(); msgKick.reason = 0; other.Send(msgKick); //断开连接 NetManager.Close(other.state); } //获取玩家数据 PlayerData playerData = DbManager.GetPlayerData(msg.id); if (playerData == null) { msg.result = 1; NetManager.Send(c, msg); return; } //构建Player Player player = new Player(c); player.id = msg.id; player.data = playerData; PlayerManager.AddPlayer(msg.id, player); c.player = player; //返回协议 msg.result = 0; player.Send(msg); }
//登录处理 public static void MsgLogin(ClientState state, MsgBase msgBase) { MsgLogin msgLogin = (MsgLogin)msgBase; //密码效验 if (!DbManager.CheckPassword(msgLogin.id, msgLogin.pw)) { Console.WriteLine(" Incorrect Password Or Account Number "); msgLogin.result = 1; NetManager.Send(state, msgLogin); return; } //不容许再次登录 if (state.player != null) { Console.WriteLine(" Repeated Login Is Not Allowed "); msgLogin.result = 1; NetManager.Send(state, msgLogin); return; } //如果已经登录,踢下线 if (PlayerManager.IsOnline(msgLogin.id)) { Player player = PlayerManager.GetPlayer(msgLogin.id); MsgKick msgKick = new MsgKick(); msgKick.reason = 0; NetManager.Send(state, msgKick); } //获取玩家数据 PlayerData playerData = DbManager.GetPlayerData(msgLogin.id); if (playerData == null) { msgLogin.result = 1; NetManager.Send(state, msgLogin); return; } //构建Player玩家 Player player1 = new Player(state); player1.id = msgLogin.id; player1.data = playerData; PlayerManager.AddPlayer(msgLogin.id, player1); state.player = player1; //返回协议 msgLogin.result = 0; player1.Send(msgLogin); }