Exemple #1
0
        static void Main(string[] args)
        {
            Console.Title = "HISP - Horse Isle Server Emulator";
            ConfigReader.OpenConfig();
            CrossDomainPolicy.GetPolicy();
            Database.OpenDatabase();
            GameDataJson.ReadGamedata();

            Map.OpenMap();
            World.ReadWorldData();
            Treasure.Init();

            DroppedItems.Init();
            WildHorse.Init();

            Drawingroom.LoadAllDrawingRooms();
            Brickpoet.LoadPoetryRooms();
            Multiroom.CreateMultirooms();

            Auction.LoadAllAuctionRooms();

            Item.DoSpecialCases();


            GameServer.StartServer();
        }
Exemple #2
0
        static void Main(string[] args)
        {
        #if (!DEBUG)
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
        #endif

            Console.Title = ServerVersion.GetBuildString();
            ConfigReader.OpenConfig();
            CrossDomainPolicy.GetPolicy();
            Database.OpenDatabase();
            GameDataJson.ReadGamedata();

            Map.OpenMap();
            World.ReadWorldData();
            Treasure.Init();

            DroppedItems.Init();
            WildHorse.Init();

            Drawingroom.LoadAllDrawingRooms();
            Brickpoet.LoadPoetryRooms();
            Multiroom.CreateMultirooms();

            Auction.LoadAllAuctionRooms();

            Item.DoSpecialCases();

            GameServer.StartServer();

            while (true)
            {
            }
            ;
        }
Exemple #3
0
        private void ReceiveDataCallback(IAsyncResult ar)
        {
            if (ClientSocket == null || !ClientSocket.Connected || Disposing)
            {
                return;
            }

            try
            {
                var bytesReceived = ClientSocket.EndReceive(ar);
                if (bytesReceived == 0)
                {
                    Logger.Info($"[{Username ?? "Anonymous"}] has disconnected from the server.");

                    if (Username != null)
                    {
                        PlayerRoom.RemovePlayer(Username);
                    }

                    Disconnect();
                    return;
                }

                var packetBytes = new byte[bytesReceived];
                Buffer.BlockCopy(SocketBuffer, 0, packetBytes, 0, bytesReceived);

                try
                {
                    var packetString = Encoding.Default.GetString(packetBytes);
                    var packetXml    = XElement.Parse(packetString.Substring(0, packetString.Length - 1)); // TODO: Make sure entire packet is here /0
                    if (packetXml.Name.LocalName.Equals("policy-file-request"))
                    {
                        Logger.Debug("Received policy request");

                        ClientSocket.Send(Encoding.Default.GetBytes(CrossDomainPolicy.GetPolicy()));
                    }
                    else
                    {
                        PacketHandler.HandleIncomingMessage(new IncomingMessage(packetXml), this);
                    }
                }
                catch (XmlException)
                {
                    // ignored
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception, "Client generated an exception.");
            }
            finally
            {
                ReceiveData();
            }
        }
        // Client
        private void ClientListenerOnReceivedBytes(object sender, ListenerReceivedBytesEventArgs e)
        {
            Logger.Verbose($"ClientListenerOnReceivedBytes({e.Bytes.Length})");

            var bytes = e.Bytes;

            // Policy
            if (bytes.Length == 23 && bytes[0] == 0x3c)
            {
                SendToClientAsync(CrossDomainPolicy.GetPolicyBytes()).GetAwaiter().GetResult();
            }
            else
            {
                Client.Encryption.ServerRC4?.Parse(bytes);
                Client.PacketProcessor.ParseBytes(bytes);
            }
        }
Exemple #5
0
        private void ReceiveDataCallback(IAsyncResult ar)
        {
            if (ClientSocket == null || !ClientSocket.Connected || Disposing)
            {
                return;
            }

            try
            {
                var bytesReceived = ClientSocket.EndReceive(ar);
                if (bytesReceived == 0)
                {
                    Logger.Info($"[{Username ?? "Anonymous"}] has disconnected from the server.");

                    if (Username != null)
                    {
                        PlayerRoom.RemovePlayer(Username);
                    }

                    Disconnect();
                    return;
                }

                var packetBytes = new byte[bytesReceived];
                Buffer.BlockCopy(SocketBuffer, 0, packetBytes, 0, bytesReceived);

                var packetString = Encoding.ASCII.GetString(packetBytes);

                packetString = packetString.Substring(0, packetString.Length - 1); // TODO: Make sure entire packet is here /0
                packetString = Constants.PacketFix.Replace(packetString, match =>  // Fix packet starting with numbers
                {
                    var replacement = Constants.PacketFixMap[match.Groups["number"].Value];

                    return($"<{replacement} ");
                });

                try
                {
                    var packetXml = XElement.Parse(packetString);
                    if (packetXml.Name.LocalName.Equals("policy-file-request"))
                    {
                        Logger.Debug("Received policy request");

                        ClientSocket.Send(Encoding.ASCII.GetBytes(CrossDomainPolicy.GetPolicy()));
                    }
                    else
                    {
                        PacketHandler.HandleIncomingMessage(new IncomingMessage(packetXml), this);
                    }
                }
                catch (XmlException exception)
                {
                    Logger.Error(exception, $"[{Username ?? "Anonymous"}] Invalid xml was received: '{packetString}'.");
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception, $"[{Username ?? "Anonymous"}] Client generated an exception.");
            }
            finally
            {
                ReceiveData();
            }
        }
Exemple #6
0
        /// <summary>
        /// Main Void, Initializes the Emulator.
        /// </summary>
        internal static void Initialize()
        {
            #region Precheck

            Console.Title    = "CityRP está iniciando..";
            ServerStarted    = DateTime.Now;
            _defaultEncoding = Encoding.Default;

            #endregion Precheck

            #region Database Connection

            CultureInfo = CultureInfo.CreateSpecificCulture("en-GB");
            try
            {
                ConfigurationData.Load(Path.Combine(Application.StartupPath, "Settings/main.ini"), false);
                RoleplayData.Load(Path.Combine(Application.StartupPath, "Settings/Roleplay/settings.ini"), true);

                DatabaseConnectionType = ConfigurationData.Data["db.type"];
                var mySqlConnectionStringBuilder = new MySqlConnectionStringBuilder
                {
                    Server                = (ConfigurationData.Data["db.hostname"]),
                    Port                  = (uint.Parse(ConfigurationData.Data["db.port"])),
                    UserID                = (ConfigurationData.Data["db.username"]),
                    Password              = (ConfigurationData.Data["db.password"]),
                    Database              = (ConfigurationData.Data["db.name"]),
                    MinimumPoolSize       = (uint.Parse(ConfigurationData.Data["db.pool.minsize"])),
                    MaximumPoolSize       = (uint.Parse(ConfigurationData.Data["db.pool.maxsize"])),
                    Pooling               = (true),
                    AllowZeroDateTime     = (true),
                    ConvertZeroDateTime   = (true),
                    DefaultCommandTimeout = (300),
                    ConnectionTimeout     = (10)
                };
                var mySqlConnectionStringBuilder2 = mySqlConnectionStringBuilder;
                Manager = new DatabaseManager(mySqlConnectionStringBuilder2.ToString(), DatabaseConnectionType);
                using (var queryReactor = GetDatabaseManager().GetQueryReactor())
                {
                    ConfigData = new ConfigData(queryReactor);
                    PetCommandHandler.Init(queryReactor);
                    PetLocale.Init(queryReactor);
                    OfflineMessages = new Dictionary <uint, List <OfflineMessage> >();
                    OfflineMessage.InitOfflineMessages(queryReactor);
                }

                #endregion Database Connection

                #region Packets Registering

                ConsoleTimer       = (int.Parse(ConfigurationData.Data["console.clear.time"]));
                ConsoleTimerOn     = (bool.Parse(ConfigurationData.Data["console.clear.enabled"]));
                FriendRequestLimit = ((uint)int.Parse(ConfigurationData.Data["client.maxrequests"]));


                LibraryParser.Incoming = new Dictionary <int, LibraryParser.StaticRequestHandler>();
                LibraryParser.Library  = new Dictionary <string, string>();
                LibraryParser.Outgoing = new Dictionary <string, int>();
                LibraryParser.Config   = new Dictionary <string, string>();

                LibraryParser.RegisterLibrary();
                LibraryParser.RegisterOutgoing();
                LibraryParser.RegisterIncoming();
                LibraryParser.RegisterConfig();

                #endregion Packets Registering

                #region Game Initalizer

                ExtraSettings.RunExtraSettings();
                CrossDomainPolicy.Set();
                _game = new Game(int.Parse(ConfigurationData.Data["game.tcp.conlimit"]));
                _game.GetNavigator().LoadNewPublicRooms();
                _game.ContinueLoading();

                #endregion Game Initalizer

                #region Languages Parser

                ServerLanguage = (Convert.ToString(ConfigurationData.Data["system.lang"]));
                _languages     = new Languages(ServerLanguage);

                #endregion Languages Parser

                #region Environment SetUp

                if (ConsoleTimerOn)
                {
                    Out.WriteLine("Console Clear Timer is enable with " + ConsoleTimer + " seconds.");
                }

                _connectionManager = new ConnectionHandling(int.Parse(ConfigurationData.Data["game.tcp.port"]),
                                                            int.Parse(ConfigurationData.Data["game.tcp.conlimit"]),
                                                            int.Parse(ConfigurationData.Data["game.tcp.conperip"]),
                                                            ConfigurationData.Data["game.tcp.enablenagles"].ToLower() == "true");

                if (LibraryParser.Config["Crypto.Enabled"] == "true")
                {
                    Handler.Initialize(LibraryParser.Config["Crypto.RSA.N"], LibraryParser.Config["Crypto.RSA.D"], LibraryParser.Config["Crypto.RSA.E"]);
                }

                _connectionManager.init();

                LibraryParser.Initialize();

                #endregion Environment SetUp

                #region Tasks and MusSystem

                if (ConsoleTimerOn)
                {
                    Timer = new Timer {
                        Interval = ConsoleTimer
                    };
                    Timer.Elapsed += TimerElapsed;
                    Timer.Start();
                }

                if (ConfigurationData.Data.ContainsKey("StaffAlert.MinRank"))
                {
                    StaffAlertMinRank = uint.Parse(ConfigurationData.Data["StaffAlert.MinRank"]);
                }

                if (ConfigurationData.Data.ContainsKey("SeparatedTasksInMainLoops.enabled") &&
                    ConfigurationData.Data["SeparatedTasksInMainLoops.enabled"] == "true")
                {
                    SeparatedTasksInMainLoops = true;
                }
                if (ConfigurationData.Data.ContainsKey("SeparatedTasksInGameClientManager.enabled") &&
                    ConfigurationData.Data["SeparatedTasksInGameClientManager.enabled"] == "true")
                {
                    SeparatedTasksInGameClientManager = true;
                }
                if (ConfigurationData.Data.ContainsKey("Debug"))
                {
                    if (ConfigurationData.Data["Debug"] == "true")
                    {
                        DebugMode = true;
                    }
                }

                TimeSpan TimeUsed = DateTime.Now - ServerStarted;

                Out.WriteLine("CityRP >> Started (" + TimeUsed.Seconds + "s, " + TimeUsed.Milliseconds + "ms)", "", ConsoleColor.Green);
                IsLive = true;

                using (var queryReactor = GetDatabaseManager().GetQueryReactor())
                {
                    queryReactor.RunFastQuery("UPDATE server_settings SET value = '1' WHERE variable = 'status'");
                }
            }
            catch (Exception e)
            {
                Out.WriteLine("Error in main.ini: Configuration file is invalid" + Environment.NewLine + e.Message, "", ConsoleColor.Red);
                Out.WriteLine("Please press Y to get more details or press other Key to Exit", "", ConsoleColor.Red);

                var key = Console.ReadKey();
                if (key.Key == ConsoleKey.Y)
                {
                    Console.WriteLine();
                    Out.WriteLine(
                        Environment.NewLine + "[Message] Error Details: " + Environment.NewLine + e.StackTrace +
                        Environment.NewLine + e.InnerException + Environment.NewLine + e.TargetSite +
                        Environment.NewLine + "[Message ]Press Any Key To Exit", "", ConsoleColor.Red);
                    Console.ReadKey();
                    Environment.Exit(1);
                }
                else
                {
                    Environment.Exit(1);
                }
            }

            #endregion Tasks and MusSystem
        }