static void Main(string[] args) { Console.WriteLine("-------------------------------------------------------"); Console.WriteLine(" <Silkroad Loginserver> Copyright (C) <2011>."); Console.WriteLine("-------------------------------------------------------"); Database.Connect(Settings.ReadSettings("Settings.txt")); Database.CheckTables(new string[] { "news", "server", "user" }); DatabaseCore.SetPulseTime(20000); DatabaseCore.SetPulseFlag(false); DatabaseCore.SetQueryLocation("tmpQueryLoginServer.txt"); DatabaseCore.Start(); Console.WriteLine("Data from database loaded, Changes on the database wont effect the server now!"); ServerSocket server = new ServerSocket("127.0.0.1", 15779); server.Start(); Console.WriteLine("Use 'help' to get all commands."); while (exit == false) { Commands(Console.ReadLine()); } }
private static void SendLogin(byte[] buffer, int ClientIndex) { /* * 16 00 L * 02 61 Opcode * 00 00 Secu * * 12 Leng_total * 07 00 Leng_String * 63 61 72 6C 6F 73 78 = carlosx * 07 00 Leng_String * 63 61 72 6C 6F 73 78 = carlosx * * FF unk * 03 ServerID */ PacketWriter writer = new PacketWriter(); PacketReader reader = new PacketReader(buffer, buffer.Length); reader.ModifyIndex(7); ushort userlen = reader.ReadWord(); string user = reader.ReadString(false, userlen); ushort passlen = reader.ReadWord(); string pass = reader.ReadString(false, passlen); reader.ReadByte(); ushort serverid = reader.ReadByte(); Console.WriteLine("User:{0} - Password:{1} - ServerId:{2}", user, pass, serverid); int UserIndex = DatabaseCore.User.GetIndexByName(user); if (DatabaseCore.User.Banned[UserIndex]) { ServerSocket.DisconnectSocket(ClientIndex); return; } else if (DatabaseCore.User.Online[UserIndex]) { writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_AUTH_INFO); writer.AppendWord(0x302); ServerSocket.Send(writer.getWorkspace(), ClientIndex); ServerSocket.DisconnectSocket(ClientIndex); } else if (DatabaseCore.User.User[UserIndex] != user || DatabaseCore.User.Password[UserIndex] != pass) { writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_AUTH_INFO); DatabaseCore.User.FailedLogins[UserIndex]++; DatabaseCore.WriteQuery("UPDATE user SET failed_logins = '{0}' WHERE id = '{1}'", DatabaseCore.User.FailedLogins[UserIndex], DatabaseCore.User.User[UserIndex]); writer.AppendWord(0x0102); writer.AppendByte(DatabaseCore.User.FailedLogins[UserIndex]); writer.AppendDword(0x03000000); writer.AppendWord(0x00); writer.AppendByte(0x00); ServerSocket.Send(writer.getWorkspace(), ClientIndex); if (DatabaseCore.User.FailedLogins[UserIndex] == 3) { DatabaseCore.User.FailedLogins[UserIndex] = 0; DatabaseCore.WriteQuery("UPDATE user SET failed_logins = '{0}' WHERE id = '{1}'", DatabaseCore.User.FailedLogins[UserIndex], DatabaseCore.User.User[UserIndex]); ServerSocket.DisconnectSocket(ClientIndex); } } else { int ServerIndex = DatabaseCore.Server.GetIndexById(serverid); if (DatabaseCore.Server.MaxUser[ServerIndex] <= DatabaseCore.Server.CurUser[ServerIndex]) { writer.SetOpcode(0xA103); writer.AppendWord(0x402); ServerSocket.Send(writer.getWorkspace(), ClientIndex); return; } else { writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_AUTH_INFO); writer.AppendByte(0x01); writer.AppendDword(0x1234); ushort leng_ip = (ushort)DatabaseCore.Server.ServerIp[ServerIndex].Length; string str_ip = DatabaseCore.Server.ServerIp[ServerIndex]; ushort port = DatabaseCore.Server.ServerPort[ServerIndex]; writer.AppendWord(leng_ip); writer.AppendString(false, str_ip); writer.AppendWord(port); ServerSocket.Send(writer.getWorkspace(), ClientIndex); Console.WriteLine("Lengip:{0} - Ip:{1} - Port:{2}", leng_ip, str_ip, port); //DatabaseCore.Server.CurUser[ServerIndex]++; //DatabaseCore.WriteQuery("UPDATE server SET users_current = '{0}' WHERE name = '{1}'", DatabaseCore.Server.CurUser[ServerIndex], DatabaseCore.Server.ServerName[ServerIndex]); } } }