internal void OnWantCharList(CMSG_REQUESTCHARACTERLIST cpkt) { //HELPER VARIABLES ServerInfo2 info; LoginSession session; //CREATE CHARACTER-LIST if (LoginSessionHandler.sessions.TryGetValue(cpkt.SessionId, out session)) { if (ServerManager2.Instance.server.TryGetValue(session.World, out info)) { SMSG_CHARACTERLIST spkt = new SMSG_CHARACTERLIST(); spkt.Result = 0; spkt.CountAllServer = (byte)session.NCharacterCount; spkt.ServerName = info.name; spkt.SessionId = cpkt.SessionId; foreach (CharInfo info2 in session.list) { spkt.AddChar(info2.charId, info2.name, 1, info2.cexp, info2.job, 0, info2.map); } this.Send((byte[])spkt); } } }
private void OnSelectServer(CMSG_SELECTSERVER cpkt) { //HELPER VARIABLES ServerInfo2 info; LoginSession session; //TRY TO ESTABLISH A CONNECTION TO OUR BACKEND if (LoginSessionHandler.sessions.TryGetValue(cpkt.SessionId, out session)) { if (ServerManager2.Instance.server.TryGetValue(cpkt.Index, out info)) { //CHECK IF CLIENT IS NULL if (info.client == null) { SMSG_CHARACTERLIST spkt = new SMSG_CHARACTERLIST(); spkt.Result = (byte)LoginError.NO_ERROR_NO_SERVER_LIST; spkt.SessionId = cpkt.SessionId; this.Send((byte[])spkt); } //CHECK IF PLAYER IS TOO YOUNG else if (session.Age < info.RequiredAge) { SMSG_CHARACTERLIST spkt = new SMSG_CHARACTERLIST(); spkt.Result = (byte)LoginError.TOO_YOUNG_TOPLAY; spkt.SessionId = cpkt.SessionId; this.Send((byte[])spkt); } //EVERYTHING OKAY else { session.IsWaiting = true; session.World = cpkt.Index; info.client.SM_SELECT_CHARACTERS(session.playerid, cpkt.SessionId); bool Timedout = false; int LastTick = Environment.TickCount; Trace.TraceError("Start waiting for character list"); while (session.IsWaiting) { if (Environment.TickCount - LastTick > 20000) { Timedout = true; session.IsWaiting = false; break; } else { Thread.Sleep(0); } } if (!Timedout) { Trace.TraceError("Received successfull awner after {0}ms", Environment.TickCount - LastTick); CMSG_REQUESTCHARACTERLIST cpkt2 = new CMSG_REQUESTCHARACTERLIST(); cpkt2.SessionId = cpkt.SessionId; OnWantCharList(cpkt2); } else { Trace.TraceError("Login server timed out: {0}ms", Environment.TickCount - LastTick); SMSG_CHARACTERLIST spkt = new SMSG_CHARACTERLIST(); spkt.Result = (byte)LoginError.UNIDENTIFIED_LOGIN_ERROR; spkt.SessionId = cpkt.SessionId; this.Send((byte[])spkt); } } } else { SMSG_CHARACTERLIST spkt = new SMSG_CHARACTERLIST(); spkt.Result = (byte)LoginError.INCORRECT_KEY_OR_SERVERNUMBERVALUE; spkt.SessionId = cpkt.SessionId; this.Send((byte[])spkt); } } }