public void AddRow(params object[] pColumns) { if (pColumns.Length != _columns.Count) { throw new Exception("Incorrect column count!"); } _rows.Add(MySQL_Connection.BuildValuesRow(pColumns)); }
public void SetWhereColumn(string pKey, object pValue) { _whereColumns.Add(pKey, MySQL_Connection.Escape(pValue)); }
public override string ToString() { if (!HasRows()) { throw new Exception("Row count = 0"); } if (IgnoreDuplicates && OnDuplicateUpdate) { throw new Exception("Can't use both IgnoreDuplicates and OnDuplicateUpdate"); } StringBuilder sb = new StringBuilder(); sb.Append("INSERT " + (IgnoreDuplicates ? "IGNORE " : "") + "INTO\r\n\t" + this.TableName + "\r\n\t("); string[] columnlist = new string[_columns.Count]; for (int i = 0; i < _columns.Count; i++) { columnlist[i] = "`" + _columns[i].Name + "`"; } sb.Append(string.Join(", ", columnlist)); sb.Append(")\r\nVALUES\r\n\t"); List <string> tmp = new List <string>(_rows); if (_rowsColumnedCount > 0) { for (int j = 0; j < _columns.Count; j++) { if (_rowsColumned[_columns[j].Name].Count != _rowsColumnedCount) { throw new Exception("Column " + _columns[j].Name + " did not have enough values!!!"); } } for (int i = 0; i < _rowsColumnedCount; i++) { object[] inputobjects = new object[_columns.Count]; for (int j = 0; j < _columns.Count; j++) { inputobjects[j] = _rowsColumned[_columns[j].Name][i]; } tmp.Add(MySQL_Connection.BuildValuesRow(inputobjects)); } } sb.Append(string.Join(",\r\n\t", tmp)); if (OnDuplicateUpdate) { List <string> updatecolumns = new List <string>(); foreach (Column col in _columns.Where(c => { return(c.InUpdate); })) { updatecolumns.Add(string.Format("`{0}` = VALUES(`{0}`)", col.Name)); } if (updatecolumns.Count > 0) { sb.Append("\r\nON DUPLICATE KEY UPDATE\r\n\t"); sb.Append(string.Join(",\r\n\t", updatecolumns.ToArray())); } } sb.Append(";"); return(sb.ToString()); }
public void AddRowUnsafe(params object[] pColumns) { // :( _rows.Add(MySQL_Connection.BuildValuesRow(pColumns)); }
public static void HandleServerConnectionStatus(ClientConnection pConnection, MaplePacket pPacket) { if (pPacket.ReadBool()) { string ip = pPacket.ReadString(); ushort port = pPacket.ReadUShort(); pConnection.Logger_WriteLine("- Client got connection with MapleStory server @ {0}:{1}", ip, port); pConnection.ConnectedToIP = ip; pConnection.ConnectedToPort = port; if (port == 8484) { pConnection.SendInfoText("Mapler.me is awaiting account check! Happy mapling!"); var info = SessionRestartCache.Instance.GetInfoForConnection(pConnection); if (info != null) { SessionRestartCache.Instance.RemoveInfo(info); } pConnection.ChannelID = 255; } else { pConnection.SendInfoText("You successfully connected, or are in the Cash Shop!"); } pConnection.ConnectedTimeToServer = MasterThread.CurrentDate; } else { pConnection.Logger_WriteLine("- Client lost connection with MapleStory server"); pConnection.SendInfoText("Maplestory is closed, or not connected properly."); pConnection.ConnectedToIP = "0.0.0.0"; pConnection.ConnectedToPort = 0; if (pConnection.ConnectedTimeToServer != DateTime.MinValue) { var timespan = MasterThread.CurrentDate - pConnection.ConnectedTimeToServer; pConnection.Logger_WriteLine("Player was connected for {0}", timespan); if (timespan.TotalSeconds < 5) { pConnection.Logger_WriteLine("CLIENT PROBABLY FAILED TO CONNECT!!!"); } if (pConnection.CharData != null) { // Probably CC-ing or something. record MySQL_Connection.Instance.RunQuery("INSERT INTO connection_log VALUES " + MySQL_Connection.BuildValuesRow(pConnection.AccountID, pConnection.CharacterInternalID, pConnection.ChannelID, pConnection.ConnectedTimeToServer, new MySQL_Connection.NowType())); } } // Delete if there's session info var info = SessionRestartCache.Instance.GetInfoForConnection(pConnection); if (info != null) { SessionRestartCache.Instance.RemoveInfo(info); } pConnection.CharData = null; pConnection.CharacterInternalID = -1; pConnection.CharacterID = -1; pConnection.ChannelID = 255; } }
static void Main(string[] args) { AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnexpectedExHandler); Console.CancelKeyPress += Console_CancelKeyPress; Logger.SetLogfile(false); MasterThread.Load("MPLRServer"); try { MySQL_Connection.Initialize(); } catch { Environment.Exit(12); } AccountDataCache.Initialize(); #if LOCALE_GMS GMSKeys.Initialize(); #endif CommandHandler.Initialize(); Timeline.Init(); Random = new System.Random(); { InitializeValidHeaders(); AcceptedIPs = new List <string>(); #if LOCALE_GMS AcceptedIPs.Add("8.31.9"); // GMS #elif LOCALE_EMS AcceptedIPs.Add("109.234.77"); // EMS #endif Clients = new List <ClientConnection>(); StartPinger(); StartCharacterDeleteQueue(); } EXPTable.Load(); SessionRestartCache.Start(); // For clients Acceptor accept = new Acceptor(ServerMapleInfo.MAPLER_PORT, sock => { new ClientConnection(sock); }); // For online check! byte[] OnlineCheckInfo = null; { MaplePacket packet = new MaplePacket(ServerMapleInfo.VERSION); packet.WriteByte(ServerMapleInfo.LOCALE); byte[] temp = packet.ToArray(); OnlineCheckInfo = new byte[temp.Length + 1]; Buffer.BlockCopy(temp, 0, OnlineCheckInfo, 1, temp.Length); OnlineCheckInfo[0] = (byte)(temp.Length + 4); packet.Dispose(); packet = null; } Acceptor acceptCheck = new Acceptor(ServerMapleInfo.MAPLER_PORT_SERVER_INFO, sock => { sock.Send(OnlineCheckInfo); sock.Send(BitConverter.GetBytes(Clients.Count)); sock.Shutdown(System.Net.Sockets.SocketShutdown.Both); sock.Close(); }); Logger.WriteLine("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+"); Logger.WriteLine("| |"); Logger.WriteLine("| Mapler.me Server |"); Logger.WriteLine("| |"); #if LOCALE_GMS Logger.WriteLine("| GLOBAL |"); #elif LOCALE_EMS Logger.WriteLine("| EUROPE |"); #elif LOCALE_KMS Logger.WriteLine("| KOREA |"); #endif Logger.WriteLine("| |"); Logger.WriteLine("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+"); Logger.WriteLine("| Build For: {0,3} Locale {1,1} |", ServerMapleInfo.VERSION, ServerMapleInfo.LOCALE); Logger.WriteLine("+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+"); Logger.WriteLine("Accepting connections on {0}, and info requests on {1}", ServerMapleInfo.MAPLER_PORT, ServerMapleInfo.MAPLER_PORT_SERVER_INFO); while (true) { string cmd = Console.ReadLine(); if (cmd == null) { break; // CTRL + C } string[] arguments = cmd.Split(' '); if (arguments.Length >= 1) { switch (arguments[0]) { #if LOCALE_GMS case "getkeys": { GMSKeys.Initialize(); break; } #endif case "reload_store": { MasterThread.Instance.AddCallback(a => { AccountDataCache.Instance.Load(); }); break; } case "request_screenshots": { MasterThread.Instance.AddCallback(a => { var tmp = new List <ClientConnection>(Clients); foreach (var client in tmp) { using (MaplePacket pack = new MaplePacket(MaplePacket.CommunicationType.ServerPacket, 0xEEFE)) { pack.SwitchOver(); client.SendPacket(pack); } } }); break; } case "testsession": { int accountid = arguments.Length > 1 ? Int32.Parse(arguments[1]) : -1; bool raw = arguments.Length > 2; var verp = new MSBLoader(); var connection = new ClientConnection(verp); connection.AccountID = accountid; verp.Parse("Savefile.msb", raw); break; } case "players": { string names = string.Join(", ", Clients); Console.WriteLine("Players online:\r\n{0}", names); break; } case "close": case "stop": case "exit": { MasterThread.Instance.AddCallback(a => { var tmp = new List <ClientConnection>(Clients); foreach (var client in tmp) { // client.Save(true, true); client.Disconnect(); } MySQL_Connection.Instance.Stop = true; MasterThread.Instance.Stop = true; }); break; } default: Console.WriteLine("Command not found"); break; } } } }