bool CheckCrowed(ushort serverid) { Definitions.Serverdef.ServerDetails SI = Definitions.Serverdef.Serverlist[serverid]; if (SI != null) { if (SI.usedSlots >= SI.maxSlots) { return(true); } } return(false); }
public static void Connect(Definitions.Clientdefinition sys) { //Wrap our code in a try / catch to catch bad exception errors try { //Create a new packet reader to read packet data PacketReader Reader = new PacketReader(sys.PacketInformation.buffer); //If the first byte = 18 we continue if (Reader.Byte() == 18) { //First string packet data is for the username string ID = Reader.Text(); //Second string packet data is for the password string PW = Reader.Text(); byte ReaderBy = Reader.Byte(); //Unknown byte not needed:0xff ?? Country? //Check what server id is requested ushort ShardID = Reader.UInt16(); //Set login result ushort lResult = 99; //Set new details for the server in the serverlist Definitions.Serverdef.ServerDetails SSI = Definitions.Serverdef.Serverlist[ShardID]; //If the server chosen is not null if (SSI != null) { //TODO: Continue commenting code here ushort myKey = 0; string sReason = ""; lock (Definitions.Serverdef.IPCResultList) { myKey = Definitions.Serverdef.IPCNewId++; } byte[] rqp = Definitions.Serverdef.IPCServer.PacketRequestLogin(Definitions.Serverdef.IPCPort, ID, PW, myKey); Servers.IPCenCode(ref rqp, SSI.code); lock (Definitions.Serverdef.IPCResultList) { Definitions.Serverdef.IPCResultList.Add(myKey, new Definitions.Serverdef.IPCItem()); Definitions.Serverdef.IPCResultList[myKey].ResultCode = 0x8000; } Definitions.Serverdef.IPCServer.Send(SSI.ip, SSI.ipcport, rqp); DateTime tOut = DateTime.Now.AddSeconds(30); while ((tOut >= DateTime.Now) && (Definitions.Serverdef.IPCResultList[myKey].ResultCode == 0x8000) && (sys.client.clientSocket.Connected)) { System.Threading.Thread.Sleep(10); } lResult = Definitions.Serverdef.IPCResultList[myKey].ResultCode; sReason = Definitions.Serverdef.IPCResultList[myKey].BanReason; lock (Definitions.Serverdef.IPCResultList) { Definitions.Serverdef.IPCResultList[myKey] = null; Definitions.Serverdef.IPCResultList.Remove(myKey); } rqp = null; switch ((LOGIN_RESULT_TYPES)lResult) { case LOGIN_RESULT_TYPES.SERVER_CROWDED: sys.client.Send(Core.Packets.Login.ServerIsFull()); sys.client.Disconnect(sys.PacketInformation.Client); return; case LOGIN_RESULT_TYPES.ACCOUNT_NOT_FOUND: sys.client.Send(Core.Packets.Login.WriteMessage("Account ID Not Found.Please register new account www.clowenonline.com")); break; case LOGIN_RESULT_TYPES.ACCOUNT_ALREADY_ONLINE: sys.client.Send(Core.Packets.Login.AllreadyConnected()); sys.client.Disconnect(sys.PacketInformation.Client); return; case LOGIN_RESULT_TYPES.ACCOUNT_BANNED: sys.client.Send(Core.Packets.Login.AccountBanned(sReason /*,BannedTime*/)); sys.client.Disconnect(sys.PacketInformation.Client); return; case LOGIN_RESULT_TYPES.ACCOUNT_CONNECT_SUCCESSFULY: sys.client.Send(Core.Packets.Login.ConnectSucces(SSI.extip != "" ? SSI.extip : SSI.ip, (Int16)SSI.port, 1)); return; case LOGIN_RESULT_TYPES.ACCOUNT_INFORMATION_FAILED: sys.client.Send(Core.Packets.Login.WriteMessage("You have typed wrong ID or PW.Please re-enter your ID or PW.")); //sys.client.Send(Core.Packets.Login.PasswordFailed(new Random().Next(1, 16), 16)); return; default: sys.client.Send(Core.Packets.Login.WriteMessage("Connection Failed.")); sys.client.Disconnect(sys.PacketInformation.Client); if (lResult == 0x8000) { //timeout sys.client.Send(Core.Packets.Login.WriteMessage("Connection Time out.Disconnecting.")); sys.client.Disconnect(sys.PacketInformation.Client); } return; } } } } catch (Exception ex) { Log.Exception(ex); } }