using Bussiness.Managers;
using Bussiness.Protocol;
using Game.Server.GameObjects;
using Game.Server.Managers;
using Game.Server.Packets;
using SqlDataProvider.Data;
using System.Collections.Generic;
using System.Security.Cryptography;
public class LoginServerConnector : BaseConnector
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private string m_loginKey;
protected override void OnDisconnect()
public override void OnRecvPacket(GSPacketIn pkg)
ThreadPool.QueueUserWorkItem(new WaitCallback(this.AsynProcessPacket), (object) pkg);
protected void AsynProcessPacket(object state)
GSPacketIn gsPacketIn = state as GSPacketIn;
this.HandleRSAKey(gsPacketIn);
this.HandleKitoffPlayer((object) gsPacketIn);
this.HandleAllowUserLogin((object) gsPacketIn);
this.HandleUserOffline(gsPacketIn);
this.HandleUserOnline(gsPacketIn);
this.HandleASSState(gsPacketIn);
this.HandleConfigState(gsPacketIn);
this.HandleChargeMoney(gsPacketIn);
this.HandleSystemNotice(gsPacketIn);
this.HandleReload(gsPacketIn);
this.HandleUpdatePlayerMarriedState(gsPacketIn);
this.HandleMarryRoomInfoToPlayer(gsPacketIn);
this.HandleShutdown(gsPacketIn);
this.HandleChatConsortia(gsPacketIn);
this.HandleChatPersonal(gsPacketIn);
this.HandleSysMess(gsPacketIn);
this.HandleBigBugle(gsPacketIn);
this.HandleMailResponse(gsPacketIn);
this.HandleConsortiaResponse(gsPacketIn);
this.HandleConsortiaCreate(gsPacketIn);
this.HandleConsortiaFight(gsPacketIn);
this.HandleFriendState(gsPacketIn);
this.HandleFirendResponse(gsPacketIn);
this.HandleRate(gsPacketIn);
this.HandleMacroDrop(gsPacketIn);
GameServer.log.Error((object) nameof (AsynProcessPacket), ex);
protected void HandleRSAKey(GSPacketIn packet)
RSAParameters parameters = new RSAParameters();
parameters.Modulus = packet.ReadBytes(128);
parameters.Exponent = packet.ReadBytes();
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(parameters);
this.SendRSALogin(rsa, this.m_loginKey);
this.SendListenIPPort(IPAddress.Parse(GameServer.Instance.Configuration.Ip), GameServer.Instance.Configuration.Port);
protected void HandleKitoffPlayer(object stateInfo)
GSPacketIn gsPacketIn = (GSPacketIn) stateInfo;
int num = gsPacketIn.ReadInt();
GamePlayer playerById = WorldMgr.GetPlayerById(num);
string msg = gsPacketIn.ReadString();
playerById.Out.SendKitoff(msg);
playerById.Client.Disconnect();
this.SendUserOffline(num, 0);
GameServer.log.Error((object) nameof (HandleKitoffPlayer), ex);
protected void HandleAllowUserLogin(object stateInfo)
GSPacketIn gsPacketIn = (GSPacketIn) stateInfo;
int num = gsPacketIn.ReadInt();
if (!gsPacketIn.ReadBoolean())
GamePlayer gamePlayer = LoginMgr.LoginClient(num);
this.SendUserOnline(num, gamePlayer.PlayerCharacter.ConsortiaID);
WorldMgr.OnPlayerOnline(num, gamePlayer.PlayerCharacter.ConsortiaID);
gamePlayer.Client.Disconnect();
this.SendUserOffline(num, 0);
this.SendUserOffline(num, 0);
GameServer.log.Error((object) nameof (HandleAllowUserLogin), ex);
protected void HandleUserOffline(GSPacketIn packet)
int num1 = packet.ReadInt();
for (int index = 0; index < num1; ++index)
int num2 = packet.ReadInt();
int consortiaID = packet.ReadInt();
if (LoginMgr.ContainsUser(num2))
this.SendAllowUserLogin(num2);
WorldMgr.OnPlayerOffline(num2, consortiaID);
protected void HandleUserOnline(GSPacketIn packet)
int num1 = packet.ReadInt();
for (int index = 0; index < num1; ++index)
int num2 = packet.ReadInt();
int consortiaID = packet.ReadInt();
LoginMgr.ClearLoginPlayer(num2);
GamePlayer playerById = WorldMgr.GetPlayerById(num2);
GameServer.log.Error((object) "Player hang in server!!!");
playerById.Out.SendKitoff(LanguageMgr.GetTranslation("Game.Server.LoginNext"));
playerById.Client.Disconnect();
WorldMgr.OnPlayerOnline(num2, consortiaID);
protected void HandleChatPersonal(GSPacketIn packet)
GamePlayer playerById = WorldMgr.GetPlayerById(packet.ReadInt());
if (playerById == null || playerById.IsBlackFriend(packet.ClientID))
playerById.Out.SendTCP(packet);
protected void HandleBigBugle(GSPacketIn packet)
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
allPlayer.Out.SendTCP(packet);
public void HandleFriendState(GSPacketIn pkg)
WorldMgr.ChangePlayerState(pkg.ClientID, pkg.ReadBoolean(), pkg.ReadInt());
public void HandleFirendResponse(GSPacketIn packet)
WorldMgr.GetPlayerById(packet.ReadInt())?.Out.SendTCP(packet);
public void HandleMailResponse(GSPacketIn packet)
WorldMgr.GetPlayerById(packet.ReadInt())?.Out.SendTCP(packet);
public void HandleReload(GSPacketIn packet)
eReloadType eReloadType = (eReloadType) packet.ReadInt();
val = MapMgr.ReLoadMap();
case eReloadType.mapserver:
val = MapMgr.ReLoadMapServer();
val = FusionMgr.ReLoad();
GameServer.Instance.Configuration.Refresh();
case eReloadType.consortia:
val = ConsortiaMgr.ReLoad();
val = FightRateMgr.ReLoad();
case eReloadType.dailyaward:
case eReloadType.language:
val = LanguageMgr.Reload("");
packet.WriteInt(GameServer.Instance.Configuration.ServerID);
packet.WriteBoolean(val);
public void HandleChargeMoney(GSPacketIn packet)
WorldMgr.GetPlayerById(packet.ClientID)?.ChargeToUser();
public void HandleSystemNotice(GSPacketIn packet)
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
allPlayer.Out.SendTCP(packet);
public void HandleASSState(GSPacketIn packet)
bool flag = packet.ReadBoolean();
AntiAddictionMgr.SetASSState(flag);
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
allPlayer.Out.SendAASControl(flag, allPlayer.IsAASInfo, allPlayer.IsMinor);
public void HandleConfigState(GSPacketIn packet)
bool flag = packet.ReadBoolean();
AwardMgr.DailyAwardState = packet.ReadBoolean();
AntiAddictionMgr.SetASSState(flag);
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
allPlayer.Out.SendAASControl(flag, allPlayer.IsAASInfo, allPlayer.IsMinor);
public void HandleSysMess(GSPacketIn packet)
if (packet.ReadInt() != 1)
WorldMgr.GetPlayerById(packet.ReadInt())?.Out.SendMessage(eMessageType.ChatERROR, LanguageMgr.GetTranslation("LoginServerConnector.HandleSysMess.Msg1", (object) packet.ReadString().Replace("\0", "")));
protected void HandleChatConsortia(GSPacketIn packet)
int num1 = (int) packet.ReadByte();
int num2 = packet.ReadInt();
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
if (allPlayer.PlayerCharacter.ConsortiaID == num2)
allPlayer.Out.SendTCP(packet);
protected void HandleConsortiaResponse(GSPacketIn packet)
switch (packet.ReadByte())
this.HandleConsortiaUserPass(packet);
this.HandleConsortiaDelete(packet);
this.HandleConsortiaUserDelete(packet);
this.HandleConsortiaUserInvite(packet);
this.HandleConsortiaBanChat(packet);
this.HandleConsortiaUpGrade(packet);
this.HandleConsortiaAlly(packet);
this.HandleConsortiaDuty(packet);
this.HandleConsortiaRichesOffer(packet);
this.HandleConsortiaShopUpGrade(packet);
this.HandleConsortiaSmithUpGrade(packet);
this.HandleConsortiaStoreUpGrade(packet);
public void HandleConsortiaFight(GSPacketIn packet)
int num = packet.ReadInt();
string message = packet.ReadString();
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
if (allPlayer.PlayerCharacter.ConsortiaID == num)
allPlayer.Out.SendMessage(eMessageType.ChatNormal, message);
public void HandleConsortiaCreate(GSPacketIn packet)
int consortiaID = packet.ReadInt();
ConsortiaMgr.AddConsortia(consortiaID);
public void HandleConsortiaUserPass(GSPacketIn packet)
int consortiaID = packet.ReadInt();
string str1 = packet.ReadString();
int num1 = packet.ReadInt();
string str2 = packet.ReadString();
int num2 = packet.ReadInt();
int num3 = packet.ReadInt();
int num4 = packet.ReadInt();
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
if (allPlayer.PlayerCharacter.ID == num1)
allPlayer.BeginChanges();
allPlayer.PlayerCharacter.ConsortiaID = consortiaID;
allPlayer.PlayerCharacter.ConsortiaName = str1;
allPlayer.PlayerCharacter.DutyName = str2;
allPlayer.PlayerCharacter.DutyLevel = num2;
allPlayer.PlayerCharacter.Right = num3;
allPlayer.PlayerCharacter.ConsortiaRepute = num4;
ConsortiaInfo consortiaInfo = ConsortiaMgr.FindConsortiaInfo(consortiaID);
if (consortiaInfo != null)
allPlayer.PlayerCharacter.ConsortiaLevel = consortiaInfo.Level;
allPlayer.CommitChanges();
if (allPlayer.PlayerCharacter.ConsortiaID == consortiaID)
allPlayer.Out.SendTCP(packet);
public void HandleConsortiaDelete(GSPacketIn packet)
int num = packet.ReadInt();
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
if (allPlayer.PlayerCharacter.ConsortiaID == num)
allPlayer.ClearConsortia();
allPlayer.AddRobRiches(-allPlayer.PlayerCharacter.RichesRob);
allPlayer.Out.SendTCP(packet);
public void HandleConsortiaUserDelete(GSPacketIn packet)
int num1 = packet.ReadInt();
int num2 = packet.ReadInt();
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
if (allPlayer.PlayerCharacter.ConsortiaID == num2 || allPlayer.PlayerCharacter.ID == num1)
if (allPlayer.PlayerCharacter.ID == num1)
allPlayer.ClearConsortia();
allPlayer.Out.SendTCP(packet);
public void HandleConsortiaUserInvite(GSPacketIn packet)
int num = packet.ReadInt();
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
if (allPlayer.PlayerCharacter.ID == num)
allPlayer.Out.SendTCP(packet);
public void HandleConsortiaBanChat(GSPacketIn packet)
bool flag = packet.ReadBoolean();
int num = packet.ReadInt();
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
if (allPlayer.PlayerCharacter.ID == num)
allPlayer.PlayerCharacter.IsBanChat = flag;
allPlayer.Out.SendTCP(packet);
public void HandleConsortiaUpGrade(GSPacketIn packet)
int consortiaID = packet.ReadInt();
int consortiaLevel = packet.ReadInt();
ConsortiaMgr.ConsortiaUpGrade(consortiaID, consortiaLevel);
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
if (allPlayer.PlayerCharacter.ConsortiaID == consortiaID)
allPlayer.PlayerCharacter.ConsortiaLevel = consortiaLevel;
allPlayer.Out.SendTCP(packet);
public void HandleConsortiaStoreUpGrade(GSPacketIn packet)
int consortiaID = packet.ReadInt();
int storeLevel = packet.ReadInt();
ConsortiaMgr.ConsortiaStoreUpGrade(consortiaID, storeLevel);
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
if (allPlayer.PlayerCharacter.ConsortiaID == consortiaID)
allPlayer.PlayerCharacter.StoreLevel = storeLevel;
allPlayer.Out.SendTCP(packet);
public void HandleConsortiaShopUpGrade(GSPacketIn packet)
int consortiaID = packet.ReadInt();
int shopLevel = packet.ReadInt();
ConsortiaMgr.ConsortiaShopUpGrade(consortiaID, shopLevel);
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
if (allPlayer.PlayerCharacter.ConsortiaID == consortiaID)
allPlayer.PlayerCharacter.ShopLevel = shopLevel;
allPlayer.Out.SendTCP(packet);
public void HandleConsortiaSmithUpGrade(GSPacketIn packet)
int consortiaID = packet.ReadInt();
int smithLevel = packet.ReadInt();
ConsortiaMgr.ConsortiaSmithUpGrade(consortiaID, smithLevel);
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
if (allPlayer.PlayerCharacter.ConsortiaID == consortiaID)
allPlayer.PlayerCharacter.SmithLevel = smithLevel;
allPlayer.Out.SendTCP(packet);
public void HandleConsortiaAlly(GSPacketIn packet)
int cosortiaID1 = packet.ReadInt();
int consortiaID2 = packet.ReadInt();
int state = packet.ReadInt();
ConsortiaMgr.UpdateConsortiaAlly(cosortiaID1, consortiaID2, state);
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
if (allPlayer.PlayerCharacter.ConsortiaID == cosortiaID1 || allPlayer.PlayerCharacter.ConsortiaID == consortiaID2)
allPlayer.Out.SendTCP(packet);
public void HandleConsortiaDuty(GSPacketIn packet)
int num1 = (int) packet.ReadByte();
int num2 = packet.ReadInt();
int num3 = packet.ReadInt();
int num4 = packet.ReadInt();
string str = packet.ReadString();
int num5 = packet.ReadInt();
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
if (allPlayer.PlayerCharacter.ConsortiaID == num2)
if (num1 == 2 && allPlayer.PlayerCharacter.DutyLevel == num4)
allPlayer.PlayerCharacter.DutyName = str;
else if (allPlayer.PlayerCharacter.ID == num3 && (num1 == 5 || num1 == 6 || (num1 == 7 || num1 == 8) || num1 == 9))
allPlayer.PlayerCharacter.DutyLevel = num4;
allPlayer.PlayerCharacter.DutyName = str;
allPlayer.PlayerCharacter.Right = num5;
allPlayer.Out.SendTCP(packet);
public void HandleRate(GSPacketIn packet)
public void HandleConsortiaRichesOffer(GSPacketIn packet)
int num = packet.ReadInt();
foreach (GamePlayer allPlayer in WorldMgr.GetAllPlayers())
if (allPlayer.PlayerCharacter.ConsortiaID == num)
allPlayer.Out.SendTCP(packet);
public void HandleUpdatePlayerMarriedState(GSPacketIn packet)
GamePlayer playerById = WorldMgr.GetPlayerById(packet.ReadInt());
playerById.LoadMarryProp();
playerById.LoadMarryMessage();
playerById.QuestInventory.ClearMarryQuest();
public void HandleMarryRoomInfoToPlayer(GSPacketIn packet)
int playerId = packet.ReadInt();
GamePlayer playerById = WorldMgr.GetPlayerById(playerId);
packet.Code = (short) 252;
packet.ClientID = playerId;
playerById.Out.SendTCP(packet);
public void HandleShutdown(GSPacketIn pkg)
GameServer.Instance.Shutdown();
public void HandleMacroDrop(GSPacketIn pkg)
Dictionary<int, MacroDropInfo> temp = new Dictionary<int, MacroDropInfo>();
for (int index = 0; index < num; ++index)
MacroDropInfo macroDropInfo = new MacroDropInfo(pkg.ReadInt(), pkg.ReadInt());
temp.Add(key, macroDropInfo);
MacroDropMgr.UpdateDropInfo(temp);
public void SendRSALogin(RSACryptoServiceProvider rsa, string key)
GSPacketIn pkg = new GSPacketIn((short) 1);
pkg.Write(rsa.Encrypt(Encoding.UTF8.GetBytes(key), false));
public void SendListenIPPort(IPAddress ip, int port)
GSPacketIn pkg = new GSPacketIn((short) 240);
pkg.Write(ip.GetAddressBytes());
public void SendPingCenter()
GamePlayer[] allPlayers = WorldMgr.GetAllPlayers();
int val = allPlayers == null ? 0 : allPlayers.Length;
GSPacketIn pkg = new GSPacketIn((short) 12);
public GSPacketIn SendUserOnline(Dictionary<int, int> users)
GSPacketIn pkg = new GSPacketIn((short) 5);
pkg.WriteInt(users.Count);
foreach (KeyValuePair<int, int> user in users)
pkg.WriteInt(user.Value);
public GSPacketIn SendUserOnline(int playerid, int consortiaID)
GSPacketIn pkg = new GSPacketIn((short) 5);
pkg.WriteInt(consortiaID);
public GSPacketIn SendUserOffline(int playerid, int consortiaID)
GSPacketIn pkg = new GSPacketIn((short) 4);
pkg.WriteInt(consortiaID);
public void SendAllowUserLogin(int playerid)
GSPacketIn pkg = new GSPacketIn((short) 3);
public void SendMailResponse(int playerid)
GSPacketIn pkg = new GSPacketIn((short) 117);
public void SendConsortiaUserPass(
GSPacketIn pkg = new GSPacketIn((short) 128, playerid);
pkg.WriteBoolean(isInvite);
pkg.WriteInt(info.ConsortiaID);
pkg.WriteString(info.ConsortiaName);
pkg.WriteInt(info.UserID);
pkg.WriteString(info.UserName);
pkg.WriteString(playerName);
pkg.WriteInt(info.DutyID);
pkg.WriteString(info.DutyName);
pkg.WriteInt(info.Offer);
pkg.WriteInt(info.RichesOffer);
pkg.WriteInt(info.RichesRob);
pkg.WriteDateTime(info.LastDate);
pkg.WriteInt(info.Grade);
pkg.WriteInt(info.Level);
pkg.WriteInt(info.State);
pkg.WriteBoolean(info.Sex);
pkg.WriteInt(info.Right);
pkg.WriteInt(info.Total);
pkg.WriteInt(info.Escape);
pkg.WriteInt(consortiaRepute);
pkg.WriteString(loginName);
pkg.WriteInt(fightpower);
pkg.WriteString("Honor");
public void SendConsortiaDelete(int consortiaID)
GSPacketIn pkg = new GSPacketIn((short) 128);
pkg.WriteInt(consortiaID);
public void SendConsortiaUserDelete(
GSPacketIn pkg = new GSPacketIn((short) 128);
pkg.WriteInt(consortiaID);
pkg.WriteBoolean(isKick);
pkg.WriteString(nickName);
pkg.WriteString(kickName);
public void SendConsortiaInvite(
GSPacketIn pkg = new GSPacketIn((short) 128);
pkg.WriteString(playerName);
pkg.WriteString(intviteName);
pkg.WriteInt(consortiaID);
pkg.WriteString(consortiaName);
public void SendConsortiaBanChat(
GSPacketIn pkg = new GSPacketIn((short) 128);
pkg.WriteString(playerName);
pkg.WriteString(handleName);
public void SendConsortiaFight(int consortiaID, int riches, string msg)
GSPacketIn pkg = new GSPacketIn((short) 158);
pkg.WriteInt(consortiaID);
public void SendConsortiaOffer(int consortiaID, int offer, int riches)
GSPacketIn pkg = new GSPacketIn((short) 156);
pkg.WriteInt(consortiaID);
public void SendConsortiaCreate(int consortiaID, int offer, string consotiaName)
GSPacketIn pkg = new GSPacketIn((short) 130);
pkg.WriteInt(consortiaID);
pkg.WriteString(consotiaName);
public void SendConsortiaUpGrade(ConsortiaInfo info)
GSPacketIn pkg = new GSPacketIn((short) 128);
pkg.WriteInt(info.ConsortiaID);
pkg.WriteString(info.ConsortiaName);
pkg.WriteInt(info.Level);
public void SendConsortiaShopUpGrade(ConsortiaInfo info)
GSPacketIn pkg = new GSPacketIn((short) 128);
pkg.WriteByte((byte) 10);
pkg.WriteInt(info.ConsortiaID);
pkg.WriteString(info.ConsortiaName);
pkg.WriteInt(info.ShopLevel);
public void SendConsortiaSmithUpGrade(ConsortiaInfo info)
GSPacketIn pkg = new GSPacketIn((short) 128);
pkg.WriteByte((byte) 11);
pkg.WriteInt(info.ConsortiaID);
pkg.WriteString(info.ConsortiaName);
pkg.WriteInt(info.SmithLevel);
public void SendConsortiaStoreUpGrade(ConsortiaInfo info)
GSPacketIn pkg = new GSPacketIn((short) 128);
pkg.WriteByte((byte) 12);
pkg.WriteInt(info.ConsortiaID);
pkg.WriteString(info.ConsortiaName);
pkg.WriteInt(info.StoreLevel);
public void SendConsortiaAlly(int consortiaID1, int consortiaID2, int state)
GSPacketIn pkg = new GSPacketIn((short) 128);
pkg.WriteInt(consortiaID1);
pkg.WriteInt(consortiaID2);
ConsortiaMgr.UpdateConsortiaAlly(consortiaID1, consortiaID2, state);
public void SendConsortiaDuty(ConsortiaDutyInfo info, int updateType, int consortiaID)
this.SendConsortiaDuty(info, updateType, consortiaID, 0, "", 0, "");
public void SendConsortiaDuty(
GSPacketIn pkg = new GSPacketIn((short) 128);
pkg.WriteByte((byte) updateType);
pkg.WriteInt(consortiaID);
pkg.WriteString(playerName);
pkg.WriteInt(info.Level);
pkg.WriteString(info.DutyName);
pkg.WriteInt(info.Right);
pkg.WriteString(handleName);
public void SendConsortiaRichesOffer(
GSPacketIn pkg = new GSPacketIn((short) 128);
pkg.WriteInt(consortiaID);
pkg.WriteString(playerName);
public void SendUpdatePlayerMarriedStates(int playerId)
GSPacketIn pkg = new GSPacketIn((short) 13);
public void SendMarryRoomInfoToPlayer(int playerId, bool state, MarryRoomInfo info)
GSPacketIn pkg = new GSPacketIn((short) 14);
pkg.WriteString(info.Name);
pkg.WriteInt(info.MapIndex);
pkg.WriteInt(info.AvailTime);
pkg.WriteInt(info.PlayerID);
pkg.WriteInt(info.GroomID);
pkg.WriteInt(info.BrideID);
pkg.WriteDateTime(info.BeginTime);
pkg.WriteBoolean(info.IsGunsaluteUsed);
public void SendShutdown(bool isStoping)
GSPacketIn pkg = new GSPacketIn((short) 15);
pkg.WriteInt(this.m_serverId);
pkg.WriteBoolean(isStoping);
public void SendPacket(GSPacketIn packet)
public LoginServerConnector(
: base(ip, port, true, readBuffer, sendBuffer)
this.m_serverId = serverid;
this.m_loginKey = string.Format("{0},{1}", (object) serverid, (object) name);