public static ushort LoginUser(string aID, ref string aPass, ref WorldMgr.player aPlayer, bool localConnect) { if (Helpers.Manager.clients.Count >= Helpers.Manager.maxSlots) { return(0); // crowded } DB ms = new DB("SELECT * FROM users WHERE id = '" + aID + "'"); if (ms.Count() == 0) { ms.Close(); return(1); } ms = new DB("SELECT * FROM users WHERE id = '" + aID + "' AND password='******'"); if (ms.Count() == 0) { ms.Close(); return(5); } using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { if (reader.GetString(1).ToLower() == aID.ToLower()) // id { if (reader.GetByte(3) == 1) // online { ms.Close(); return(2); // already online } if (reader.GetInt32(5) == 1) // banned { aPass = reader.GetString(4); ms.Close(); return(3); // banned } if (aPlayer == null && localConnect) { DB.query("UPDATE users SET online=1 WHERE userid='" + reader.GetInt32(0) + "'"); } aPlayer = new WorldMgr.player(); aPlayer.AccountName = aID; aPlayer.Password = aPass; // Nukei: ?? whats the reason for saving password in memory ? aPlayer.ID = reader.GetInt32(0); aPlayer.pGold = reader.GetInt64(7); aPlayer.Silk = reader.GetInt32(6); aPlayer.SilkPrem = reader.GetInt32(9); aPlayer.wSlots = reader.GetByte(11); ms.Close(); return(4); } } } ms.Close(); return(6); // Bilinmeyen geri dönüş:Özel bir durum oluşmadı. (Mecburi Gönderim) }
public static ushort LoginUser(string aID, ref string aPass, ref WorldMgr.player aPlayer, bool localConnect) { if (Helpers.Manager.clients.Count >= Helpers.Manager.maxSlots) { return 0; // crowded } DB ms = new DB("SELECT * FROM users WHERE id = '" + aID + "'"); if (ms.Count() == 0) { ms.Close(); return 1; } ms = new DB("SELECT * FROM users WHERE id = '" + aID + "' AND password='******'"); if (ms.Count() == 0) { ms.Close(); return 5; } using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { if (reader.GetString(1).ToLower() == aID.ToLower()) // id { if (reader.GetByte(3) == 1) // online { ms.Close(); return 2; // already online } if (reader.GetInt32(5) == 1) // banned { aPass = reader.GetString(4); ms.Close(); return 3; // banned } if (aPlayer == null && localConnect) DB.query("UPDATE users SET online=1 WHERE userid='" + reader.GetInt32(0) + "'"); aPlayer = new WorldMgr.player(); aPlayer.AccountName = aID; aPlayer.Password = aPass; // Nukei: ?? whats the reason for saving password in memory ? aPlayer.ID = reader.GetInt32(0); aPlayer.pGold = reader.GetInt64(7); aPlayer.Silk = reader.GetInt32(6); aPlayer.SilkPrem = reader.GetInt32(9); aPlayer.wSlots = reader.GetByte(11); ms.Close(); return 4; } } } ms.Close(); return 6; // Bilinmeyen geri dönüş:Özel bir durum oluşmadı. (Mecburi Gönderim) }
public static void _OnIPC(Socket aSocket, EndPoint ep, byte[] data) { try { if (data.Length >= 6) { ushort pServer = (ushort)(data[0] + (data[1] << 8)); Helpers.Settings.SrevoServerInfo remoteLoginServer = Helpers.GetInformation.GetServerByEndPoint(((IPEndPoint)ep).Address.ToString(), pServer); if (remoteLoginServer != null) { // decode data Servers.IPCdeCode(ref data, remoteLoginServer.code); byte pCmd = data[3]; int dLen = (data[4] + (data[5] << 8)); byte crc = Servers.BCRC(data, data.Length - 1); if (data[data.Length - 1] != crc) // wrong CRC { Log.Exception("[IPC] Wrong Checksum from Server " + remoteLoginServer.id + ". Please Check !"); return; } if (data.Length >= (dLen + 6)) { if (pCmd == (byte)IPCCommand.IPC_REQUEST_SERVERINFO) { remoteLoginServer.lastPing = DateTime.Now; byte[] rspBuf = Helpers.Manager.IPC.PacketResponseServerInfo(Servers.IPCPort, 1, 100, Helpers.Manager.GetOnlineClientCount, Helpers.Settings.ClientVersion); Servers.IPCenCode(ref rspBuf, remoteLoginServer.code); Helpers.Manager.IPC.Send(remoteLoginServer.ip, remoteLoginServer.ipcport, rspBuf); } else if (pCmd == (byte)IPCCommand.IPC_REQUEST_LOGIN) { remoteLoginServer.lastPing = DateTime.Now; if (dLen > 4) { int bp = 6; byte cLen = data[bp++]; byte[] tmpbuf = new byte[cLen]; Buffer.BlockCopy(data, bp, tmpbuf, 0, cLen); bp += cLen; string tmpID = ASCIIEncoding.ASCII.GetString(tmpbuf); cLen = data[bp++]; tmpbuf = new byte[cLen]; Buffer.BlockCopy(data, bp, tmpbuf, 0, cLen); bp += cLen; ushort rCode = (ushort)(data[bp] + (data[bp + 1] << 8)); string tmpPW = ASCIIEncoding.ASCII.GetString(tmpbuf); WorldMgr.player tmpPlayer = null; ushort lResult = PlayerMgr.LoginUser(tmpID, ref tmpPW, ref tmpPlayer, false); tmpPlayer = null; tmpbuf = Helpers.Manager.IPC.PacketResponseLogin(Servers.IPCPort, lResult, rCode, lResult == 4 ? tmpPW : ""); Servers.IPCenCode(ref tmpbuf, remoteLoginServer.code); Helpers.Manager.IPC.Send(remoteLoginServer.ip, remoteLoginServer.ipcport, tmpbuf); } else { Console.WriteLine("[IPC] content to short"); } } else { Console.WriteLine("[IPC] unknown command recevied"); } } else { Console.WriteLine("[IPC] data to short"); } } else { Console.WriteLine("[IPC] can't find the LoginServer {0}:{1}", ((IPEndPoint)ep).Address.ToString(), pServer); } } else { Log.Exception("[IPC] packet to short from " + ep.ToString()); } } catch (Exception ex) { Log.Exception("[IPC.OnIPC] ", ex); } }