Ejemplo n.º 1
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            // load network devices
            ComboInterfaces.ItemsSource  = NetworkInterfaceList.Instance.GetList();
            ComboInterfaces.SelectedItem = NetworkInterfaceList.Instance.GetBestInterface();

            DebugInformation.WriteLine("Finished reading network interfaces.");

            // prepare PacketDispatcher, add default filters
            PacketDispatcher.Create();
            AddDefaultFilters();

            // connect filter list to GUI
            GridFilters.ItemsSource = PacketDispatcher.Instance.GetPacketFilters();
        }
Ejemplo n.º 2
0
        public void Setup(IPEndPoint info)
        {
            this._listener    = new TcpPacketsReceiver(info, 2);
            this._fileRequest = new DirectoryRequestHandler();
            this._fileRequest.ReceivedFile += OnReceivedFile;

            this._folderRequest = new Handler.DirectoryRequestHandler();

            this._dispatcher = new PacketDispatcher(this._listener,
                                                    new List <IPacketHandler>
            {
                this._folderRequest,
                this._fileRequest,
            });
            this._listener.Listen();
        }
Ejemplo n.º 3
0
        public override void _Ready()
        {
            LOG = new Logger(this.GetType().Name);
            ConnectedClients = new System.Collections.Generic.Dictionary<int, ClientRepresentation>();
            PackedScene dispatcherPackedScene = GD.Load("res://src/network/PacketDispatcher.tscn") as PackedScene;
            dispatcher = (PacketDispatcher)dispatcherPackedScene.Instance();
            AddChild(dispatcher);

            RegisterServerCallbacks();
            port =(int)ProjectSettings.GetSetting("feudal_mp/server/port");
            ENetInstance = new NetworkedMultiplayerENet();
            ENetInstance.CreateServer(port);
            GetTree().NetworkPeer = ENetInstance;
            LOG.Info("Server started on port " + port);

            ENetInstance.Connect("peer_connected", this, "receive_peer_connected");
            ENetInstance.Connect("peer_disconnected", this, "receive_peer_disconnected");
        }
        public void Send_a_file()
        {
            var target      = @"C:\Users\Freddy\Desktop\Sandbox\bestPractices.txt";
            var file        = File.ReadAllBytes(target);
            var destination = @"C:\Users\Freddy\Desktop\Sandbox\Destination\bestPractices.txt";

            var senderInfo   = new IPEndPoint(SocketHelper.GetIPAddress(), 8781);
            var receiverInfo = new IPEndPoint(SocketHelper.GetIPAddress(), 8782);

            this.Receiver = new TcpPacketsReceiver(receiverInfo, 2);
            this.Sender   = new TcpSender(senderInfo, receiverInfo);

            var packetDispatcher = new PacketDispatcher(this.Receiver,
                                                        new List <Handler.IPacketHandler>
            {
                new DirectoryRequestHandler()
            });

            packetDispatcher.Start();

            this.Sender.Connect();

            var namePacktes = PacketHelper.Frame(HeaderContainer.FileName, Encoding.ASCII.GetBytes(destination));

            this.Sender.Send(namePacktes);


            var filePacktes = PacketHelper.Frame(HeaderContainer.FileContent, file);

            this.Sender.Send(filePacktes);


            var packets = PacketHelper.Frame(HeaderContainer.EndFileContent, new Byte[] { 0x22 });

            this.Sender.Send(packets);


            Assert.AreEqual(file, File.ReadAllBytes(destination));

            this.Receiver.Close();
            this.Sender.Close();
        }
Ejemplo n.º 5
0
        public override void _Ready()
        {
            LOG = new Logger(this.GetType().Name);
            PackedScene dispatcherPackedScene = GD.Load("res://src/network/PacketDispatcher.tscn") as PackedScene;

            dispatcher = (PacketDispatcher)dispatcherPackedScene.Instance();
            AddChild(dispatcher);

            PlayerName = GetNode <Godot.LineEdit>("/root/FeudalMP/UI/Control/HBoxContainer/CenterContainer/VBoxContainer/name/LineEdit").Text;
            string ip   = GetNode <Godot.LineEdit>("/root/FeudalMP/UI/Control/HBoxContainer/CenterContainer/VBoxContainer/ip/LineEdit").Text;
            int    port = System.Int32.Parse(GetNode <Godot.LineEdit>("/root/FeudalMP/UI/Control/HBoxContainer/CenterContainer/VBoxContainer/port/LineEdit").Text);

            RegisterClientCallbacks();
            ENetInstance = new NetworkedMultiplayerENet();
            ENetInstance.CreateClient(ip, port);
            GetTree().NetworkPeer = ENetInstance;

            ENetInstance.Connect("connection_failed", this, "receive_connection_failed");
            ENetInstance.Connect("connection_succeeded", this, "receive_connection_succeeded");
            ENetInstance.Connect("server_disconnected", this, "receive_server_disconnected");
        }
Ejemplo n.º 6
0
        public static void Main(string[] args)
        {
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            AppDomain.CurrentDomain.ProcessExit        += CurrentDomain_ProcessExit;

            ParseArguments(args);

            SetupConsoleLogging();

            m_Thread = Thread.CurrentThread;
            Process  = Process.GetCurrentProcess();
            Assembly = Assembly.GetEntryAssembly();

            if (m_Thread != null)
            {
                m_Thread.Name = "Core Thread";
            }

            if (BaseDirectory.Length > 0)
            {
                Directory.SetCurrentDirectory(BaseDirectory);
            }

            var version = Assembly.GetName().Version;

            CoreVersion = version;

            var platform = (int)Environment.OSVersion.Platform;

            if (platform == 4 || platform == 128)
            {
                Unix = true;
            }

            GCSettings.LatencyMode = GCLatencyMode.LowLatency;

            log.Info("X-RunUO Server - Version {0}.{1}.{2}, Build {3}", version.Major, version.Minor, version.Build, version.Revision);
            log.Info("Running on OS {0}", Environment.OSVersion);
            log.Info("Running on {0} {1}", Unix ? "Mono" : ".NET Framework", Environment.Version);

            if (MultiProcessor || Is64Bit)
            {
                log.Info("Optimizing for {0} {2}processor{1}", ProcessorCount, ProcessorCount == 1 ? "" : "s", Is64Bit ? "64-bit " : "");
            }

            log.Info("Using GC {0} {1} mode", GCSettings.IsServerGC ? "Server" : "Workstation", GCSettings.LatencyMode);

            Config = new RootConfig(BaseDirectory, "x-runuo.xml");

            Server.Config.Load();

            #region Dependency management
            LibraryConfig = new LibraryConfig(BaseDirectory, "libraries.xml");

            if (ForceUpdateDeps)
            {
                Directory.Delete(Path.Combine(BaseDirectory, "deps"), recursive: true);
            }
            #endregion

            if (!ScriptCompiler.Compile(Debug))
            {
                log.Fatal("Compilation failed. Press any key to exit.");
                Console.ReadLine();
                return;
            }

            ScriptCompiler.VerifyLibraries();

            // This instance is shared among timer scheduler and timer executor,
            // and accessed from both core & timer threads.
            var timerQueue = new Queue <Timer>();

            // Timer scheduler must be set up before world load, since world load
            // could schedule timers on entity deserialization.
            var timerScheduler = TimerScheduler.Instance = new TimerScheduler(timerQueue);
            m_TimerThread = new TimerThread(timerScheduler);

            var timerExecutor = new TimerExecutor(timerQueue);

            try
            {
                ScriptCompiler.Configure();

                TileData.Configure();
            }
            catch (TargetInvocationException e)
            {
                log.Fatal("Configure exception: {0}", e.InnerException);
                return;
            }

            SaveConfig();

            Region.Load();
            World.Load();

            try
            {
                ScriptCompiler.Initialize();
            }
            catch (TargetInvocationException e)
            {
                log.Fatal("Initialize exception: {0}", e.InnerException);
                return;
            }

            m_TimerThread.Start();

            NetServer netServer = new NetServer(new Listener(Listener.Port));
            netServer.Initialize();

            GameServer.Instance = new GameServer(netServer);
            GameServer.Instance.Initialize();

            EventSink.InvokeServerStarted();

            PacketDispatcher.Initialize();

            Now              = DateTime.UtcNow;
            m_TotalProfile   = new MainProfile(Now);
            m_CurrentProfile = new MainProfile(Now);

            try
            {
                while (!Closing)
                {
                    Now = DateTime.UtcNow;

                    Thread.Sleep(1);

                    ClockProfile(MainProfile.TimerId.Idle);

                    Mobile.ProcessDeltaQueue();

                    ClockProfile(MainProfile.TimerId.MobileDelta);

                    Item.ProcessDeltaQueue();

                    ClockProfile(MainProfile.TimerId.ItemDelta);

                    timerExecutor.Slice();

                    ClockProfile(MainProfile.TimerId.Timers);

                    netServer.Slice();

                    ClockProfile(MainProfile.TimerId.Network);

                    // Done with this iteration.
                    m_TotalProfile.Next();
                    m_CurrentProfile.Next();
                }
            }
            catch (Exception e)
            {
                HandleCrashed(e);
            }

            m_TimerThread.Stop();
        }
Ejemplo n.º 7
0
        static void DoInit()
        {
            //Sytarra
            if (Utility.GetHardwareId() != "0F8BFBFF000206C2")
            {
                // System.Diagnostics.Process.Start("shutdown.exe", "-r -t 0");
                // Environment.Exit(0);
            }

            //read server count
            var settings = Global.cfgmgr;
            var srvmgr   = Global.srvmgr;
            var logmgr   = Global.logmgr;

            string commonSettingsPath = ".\\sroprot.ini";
            string autoNoticePath     = ".\\autonotice.ini";
            string chatCmdPath        = ".\\chatcmd.ini";

            if (!File.Exists(commonSettingsPath))
            {
                Console.WriteLine("sroprot.ini not found. Exiting.");
                Console.ReadKey();
                Environment.Exit(0);
            }

            if (!File.Exists(autoNoticePath))
            {
                Console.WriteLine("autonotice.ini not found. Press any key to continue.");
                Console.ReadKey();
            }

            try
            {
                Global.WindowName                = settings.ReadValue(commonSettingsPath, "server", "name");
                Global.EnableItemMallBuyFix      = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "item_mall_buy_fix"));
                Global.EnableSilkDisplayFix      = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "silk_display_fix"));
                Global.EnableWebItemMallTokenFix = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "web_item_mall_token_fix"));

                Global.MaxBytesPerSecRecv        = int.Parse(settings.ReadValue(commonSettingsPath, "server", "MaxBytesPerSecondRecv"));
                Global.MaxBytesPerSecSend        = int.Parse(settings.ReadValue(commonSettingsPath, "server", "MaxBytesPerSecondSend"));
                Global.EnableTrafficAbuserReport = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "ReportTrafficAbuser"));
                Global.PerAddressConnectionLimit = int.Parse(settings.ReadValue(commonSettingsPath, "server", "PerAddressConnectionLimit"));


                Global.EnableLogShowNotify  = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "display_notify"));
                Global.EnableLogShowWarning = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "display_warning"));
                Global.EnableLogShowError   = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "display_error"));

                Global.EnablePacketLog        = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "log_packets"));
                Global.EnableBanExploitAbuser = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "enable_ban_exploit_abuser_ip"));


                Global.EnableLogFile             = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "write_log_file"));
                Global.LogFolderName             = settings.ReadValue(commonSettingsPath, "server", "log_folder");
                Global.EnableChatLog             = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "log_chat"));
                Global.EnableIpAccountLimitation = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "acc_ip_limitation"));

                Global.EnableLoginProcessing = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "enable_login_processing"));
                Global.EnableUseSha1Salt     = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "use_sha1_salt"));
                Global.Sha1PasswordSalt      = settings.ReadValue(commonSettingsPath, "server", "sha1_pw_salt");
                Global.TextEncodeCode        = int.Parse(settings.ReadValue(commonSettingsPath, "server", "text_encode_code"));
                Global.ShardMaxOnline        = int.Parse(settings.ReadValue(commonSettingsPath, "server", "shard_max_online"));
                Global.ShardFakeOnline       = int.Parse(settings.ReadValue(commonSettingsPath, "server", "shard_fake_online"));
                Global.AccountIpLimitCount   = int.Parse(settings.ReadValue(commonSettingsPath, "server", "acc_ip_limitation_connection_count"));

                Global.EnableExchangeCooldown      = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "enable_exchange_cooldown"));
                Global.ExchangeCooldownInSecond    = double.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "exchange_cooldown_in_second"));
                Global.DisableBotArenaRegistration = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "disable_bot_arena_registration"));
                Global.DisableBotFlagRegistration  = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "disable_bot_flag_registration"));
                Global.OriginalLocale          = int.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "original_locale"));
                Global.EnableBotDetected       = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "enable_bot_detected"));
                Global.EnableLogOutCooldown    = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "enable_log_out_cooldown"));
                Global.LogOutCooldownInSecond  = double.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "log_out_cooldown_in_second"));
                Global.EnableStallCooldown     = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "enable_stall_cooldown"));
                Global.StallCooldownInSecond   = double.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "stall_cooldown_in_second"));
                Global.EnableGmAccessControl   = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "gm_access_control"));
                Global.EnableAbuseFilter       = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "enable_abuse_filter"));
                Global.EnableArenaStatusNotify = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "enable_arena_status_notify"));
                Global.FixWaterTampleTeleport  = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "fix_water_tample_teleport"));
                Global.UseSafeRegion           = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "use_safe_region"));
                //--------------------------------------------------
                Global.EnableAutoCaptcha        = bool.Parse(settings.ReadValue(commonSettingsPath, "game", "enable_auto_captcha"));
                Global.AutoCaptchaValue         = settings.ReadValue(commonSettingsPath, "game", "auto_captcha_value");
                Global.EnableStartIntro         = bool.Parse(settings.ReadValue(commonSettingsPath, "game", "enable_start_intro"));
                Global.StartIntroScriptName     = settings.ReadValue(commonSettingsPath, "game", "start_intro_script_name");
                Global.EnableLoginNotice        = bool.Parse(settings.ReadValue(commonSettingsPath, "game", "enable_login_notice"));
                Global.EnableUniqueDeathNotify  = bool.Parse(settings.ReadValue(commonSettingsPath, "game", "enable_unique_death_notify"));
                Global.EnableAutoNotice         = bool.Parse(settings.ReadValue(commonSettingsPath, "game", "enable_auto_notice"));
                Global.AutoNoticeSendBeginDelay = int.Parse(settings.ReadValue(commonSettingsPath, "game", "auto_notice_begin_after"));
                Global.EnableChatCommands       = bool.Parse(settings.ReadValue(commonSettingsPath, "game", "enable_chat_commands"));
                Global.ArenaRegistrationLevel   = int.Parse(settings.ReadValue(commonSettingsPath, "game", "arena_registration_level"));
                Global.FlagRegistrationLevel    = int.Parse(settings.ReadValue(commonSettingsPath, "game", "flag_registration_level"));
                Global.DisableAcademyInvite     = bool.Parse(settings.ReadValue(commonSettingsPath, "game", "disable_academy_invite"));
                Global.MaxOptLevel       = int.Parse(settings.ReadValue(commonSettingsPath, "game", "max_opt_level"));
                Global.MaxMembersInGuild = int.Parse(settings.ReadValue(commonSettingsPath, "game", "max_members_in_guild"));
                Global.MaxGuildInUnion   = int.Parse(settings.ReadValue(commonSettingsPath, "game", "max_guild_in_alliance"));


                Global.SafeRegions = settings.GetSafeRegions();
                Global.LoginNotice = settings.GetLoginNotice();
                Global.AbuseWord   = settings.GetAbouseWord();

                Global.ServerInfo     = settings.GetServerInfo();
                Global.ServerSchedule = settings.GetServerSchedule();

                logmgr.WriteLog(LogLevel.Notify, "acc_ip_limitation={0}", Global.EnableIpAccountLimitation);
                logmgr.WriteLog(LogLevel.Notify, "item_mall_buy_fix={0}", Global.EnableItemMallBuyFix);
                logmgr.WriteLog(LogLevel.Notify, "silk_display_fix={0}", Global.EnableSilkDisplayFix);
                logmgr.WriteLog(LogLevel.Notify, "web_item_mall_token_fix={0}", Global.EnableWebItemMallTokenFix);
                logmgr.WriteLog(LogLevel.Notify, "MaxBytesPerSecondRecv={0}", Global.MaxBytesPerSecRecv);
                logmgr.WriteLog(LogLevel.Notify, "MaxBytesPerSecondSend={0}", Global.MaxBytesPerSecSend);
                logmgr.WriteLog(LogLevel.Notify, "ReportTrafficAbuser={0}", Global.EnableTrafficAbuserReport);
                logmgr.WriteLog(LogLevel.Notify, "PerAddressConnectionLimit={0}", Global.PerAddressConnectionLimit);
                logmgr.WriteLog(LogLevel.Notify, "display_notify={0}", Global.EnableLogShowNotify);
                logmgr.WriteLog(LogLevel.Notify, "display_warning={0}", Global.EnableLogShowWarning);
                logmgr.WriteLog(LogLevel.Notify, "display_error={0}", Global.EnableLogShowError);
                logmgr.WriteLog(LogLevel.Notify, "log_packets={0}", Global.EnablePacketLog);

                logmgr.WriteLog(LogLevel.Notify, "enable_ban_exploit_abuser_ip={0}", Global.EnableBanExploitAbuser);

                logmgr.WriteLog(LogLevel.Notify, "write_log_file={0}", Global.EnableLogFile);
                logmgr.WriteLog(LogLevel.Notify, "log_folder={0}", Global.LogFolderName);
                logmgr.WriteLog(LogLevel.Notify, "log_chat={0}", Global.EnableChatLog);

                logmgr.WriteLog(LogLevel.Notify, "enable_exchange_cooldown={0}", Global.EnableExchangeCooldown);
                logmgr.WriteLog(LogLevel.Notify, "exchange_cooldown_in_second={0}", Global.ExchangeCooldownInSecond);
                logmgr.WriteLog(LogLevel.Notify, "disable_bot_arena_registration={0}", Global.DisableBotArenaRegistration);
                logmgr.WriteLog(LogLevel.Notify, "original_locale={0}", Global.OriginalLocale);
                logmgr.WriteLog(LogLevel.Notify, "enable_bot_detected={0}", Global.EnableBotDetected);
                logmgr.WriteLog(LogLevel.Notify, "enable_start_intro={0}", Global.EnableStartIntro);
                logmgr.WriteLog(LogLevel.Notify, "start_intro_script_name={0}", Global.StartIntroScriptName);

                logmgr.WriteLog(LogLevel.Notify, "enable_arena_status_notify={0}", Global.EnableArenaStatusNotify);
                logmgr.WriteLog(LogLevel.Notify, "fix_water_tample_teleport={0}", Global.FixWaterTampleTeleport);
                logmgr.WriteLog(LogLevel.Notify, "enable_login_processing={0}", Global.EnableLoginProcessing);
                logmgr.WriteLog(LogLevel.Notify, "use_sha1_salt={0}", Global.EnableUseSha1Salt);

                logmgr.WriteLog(LogLevel.Notify, "enable_auto_captcha={0}, value={1}", Global.EnableAutoCaptcha, Global.AutoCaptchaValue);
                logmgr.WriteLog(LogLevel.Notify, "log_out_cooldown={0}", Global.EnableLogOutCooldown);
                logmgr.WriteLog(LogLevel.Notify, "log_out_cooldown_in_second={0}", Global.LogOutCooldownInSecond);
                logmgr.WriteLog(LogLevel.Notify, "enable_stall_cooldown={0}", Global.EnableStallCooldown);
                logmgr.WriteLog(LogLevel.Notify, "stall_cooldown_in_second={0}", Global.StallCooldownInSecond);
                logmgr.WriteLog(LogLevel.Notify, "gm_access_control={0}", Global.EnableGmAccessControl);

                int nSafeRegions = (Global.SafeRegions != null) ? Global.SafeRegions.Count : 0;
                int nLoginNotice = (Global.LoginNotice != null) ? Global.LoginNotice.Count : 0;
                int nAbuseword   = (Global.AbuseWord != null) ? Global.AbuseWord.Count : 0;

                logmgr.WriteLog(LogLevel.Notify, "use_safe_region={0}, count = {1}", Global.UseSafeRegion, nSafeRegions);
                logmgr.WriteLog(LogLevel.Notify, "enable_login_notice={0}, count = {1}", Global.EnableLoginNotice, nLoginNotice);
                logmgr.WriteLog(LogLevel.Notify, "enable_unique_death_notify={0}", Global.EnableUniqueDeathNotify);
                logmgr.WriteLog(LogLevel.Notify, "enable_auto_notice={0}", Global.EnableAutoNotice);
                logmgr.WriteLog(LogLevel.Notify, "auto_notice_begin_after={0}", Global.AutoNoticeSendBeginDelay);
                logmgr.WriteLog(LogLevel.Notify, "enable_chat_commands={0}", Global.EnableChatCommands);

                logmgr.WriteLog(LogLevel.Notify, "enable_abuse_filter={0}, count = {1}", Global.EnableAbuseFilter, nAbuseword);

                logmgr.WriteLog(LogLevel.Notify, "arena_registration_level={0}", (Global.ArenaRegistrationLevel > 0) ? Global.ArenaRegistrationLevel.ToString() : "No restriction");
                logmgr.WriteLog(LogLevel.Notify, "flag_registration_level={0}", (Global.FlagRegistrationLevel > 0) ? Global.FlagRegistrationLevel.ToString() : "No restriction");
                logmgr.WriteLog(LogLevel.Notify, "text_encode_code={0}", Global.TextEncodeCode);
                logmgr.WriteLog(LogLevel.Notify, "disable_academy_invite={0}", Global.DisableAcademyInvite);
                logmgr.WriteLog(LogLevel.Notify, "max_opt_level={0}", Global.MaxOptLevel);
                logmgr.WriteLog(LogLevel.Notify, "max_members_in_guild={0}", Global.MaxMembersInGuild);
                logmgr.WriteLog(LogLevel.Notify, "max_guild_in_alliance={0}", Global.MaxGuildInUnion);
                logmgr.WriteLog(LogLevel.Notify, "shard_max_online={0}", Global.ShardMaxOnline);
                logmgr.WriteLog(LogLevel.Notify, "shard_fake_online={0}", Global.ShardFakeOnline);
                logmgr.WriteLog(LogLevel.Notify, "acc_ip_limitation_connection_count={0}", Global.AccountIpLimitCount);
            }
            catch
            {
                logmgr.WriteLog(LogLevel.Error, "Something went wrong while reading / parsing settings. Press any key to exit.");
                Console.ReadKey();
                Environment.Exit(0);
            }

            //If reading general configuration was successful
            Console.WriteLine("------------------------------------------");
            Global.sql_str = settings.ReadValue(commonSettingsPath, "server", "sql_str");
            string sql_str = Global.sql_str;

            bool conn_res = Global.dbmgr.OpenConnection(sql_str);

            if (!conn_res)
            {
                logmgr.WriteLog(LogLevel.Error, "Database connection failed ");
                // Console.ReadKey();
                // Environment.Exit(0);
            }
            else
            {
                logmgr.WriteLog(LogLevel.Notify, "Database server connected");
            }


            int    srv_count = int.Parse(settings.ReadValue(commonSettingsPath, "server", "count"));
            string sect_name = string.Empty;

            //read each server
            for (int i = 0; i < srv_count; i++)
            {
                //-----------------------------------------------------------------------------
                sect_name = string.Format("server_{0}", i);
                string bind_addr    = settings.ReadValue(commonSettingsPath, sect_name, "bind_ip");
                int    bind_port    = int.Parse(settings.ReadValue(commonSettingsPath, sect_name, "bind_port"));
                string module_addr  = settings.ReadValue(commonSettingsPath, sect_name, "module_ip");
                int    module_port  = int.Parse(settings.ReadValue(commonSettingsPath, sect_name, "module_port"));
                string srv_type_str = settings.ReadValue(commonSettingsPath, sect_name, "type");
                bool   blowfish     = bool.Parse(settings.ReadValue(commonSettingsPath, sect_name, "blowfish"));
                bool   sec_bytes    = bool.Parse(settings.ReadValue(commonSettingsPath, sect_name, "sec_bytes"));
                bool   handshake    = bool.Parse(settings.ReadValue(commonSettingsPath, sect_name, "handshake"));


                //-----------------------------------------------------------------------------

                ServerType MyServerType = ServerType.Unknown;

                switch (srv_type_str)
                {
                case "AgentServer":
                {
                    MyServerType = ServerType.AgentServer;
                }
                break;

                case "GatewayServer":
                {
                    MyServerType = ServerType.GatewayServer;
                }
                break;

                case "DownloadServer":
                {
                    MyServerType = ServerType.DownloadServer;
                }
                break;
                }

                if (MyServerType == ServerType.Unknown)
                {
                    logmgr.WriteLog(LogLevel.Error, "Unknown server type specified for server i {0}, id {1}", i, srv_type_str);
                    return;
                }


                List <RedirectRule> RedirectRules = new List <RedirectRule>();

                #region Gateway -> Download/Agent redirects

                if (MyServerType == ServerType.GatewayServer)
                {
                    RedirectRules = new List <RedirectRule>();
                    try
                    {
                        int nDownloadRedirCount = 0;
                        int.TryParse(settings.ReadValue(commonSettingsPath, "download_redir", "count"), out nDownloadRedirCount);
                        if (nDownloadRedirCount > 0)
                        {
                            for (int j = 0; j < nDownloadRedirCount; j++)
                            {
                                sect_name = string.Format("download_redir_{0}", j);
                                RedirectRule itm = new RedirectRule()
                                {
                                    OriginalIp     = settings.ReadValue(commonSettingsPath, sect_name, "src_ip"),
                                    OriginalPort   = int.Parse(settings.ReadValue(commonSettingsPath, sect_name, "src_port")),
                                    NewIp          = settings.ReadValue(commonSettingsPath, sect_name, "dest_ip"),
                                    NewPort        = int.Parse(settings.ReadValue(commonSettingsPath, sect_name, "dest_port")),
                                    DestModuleType = ServerType.DownloadServer
                                };

                                Console.WriteLine("src {0}:{1} dest {2}:{3}", itm.OriginalIp, itm.OriginalPort, itm.NewIp, itm.NewPort);

                                RedirectRules.Add(itm);
                            }
                        }

                        if (nDownloadRedirCount > 0)
                        {
                            logmgr.WriteLog(LogLevel.Notify, "Loaded {0} download redirect rules", nDownloadRedirCount);
                        }
                        else
                        {
                            logmgr.WriteLog(LogLevel.Notify, "No download redirect rules given");
                        }
                    }
                    catch
                    {
                        logmgr.WriteLog(LogLevel.Warning, "No download redirect rules to load or error in format");
                    }

                    try
                    {
                        int nAgentRedirCount = int.Parse(settings.ReadValue(commonSettingsPath, "agent_redir", "count"));

                        for (int j = 0; j < nAgentRedirCount; j++)
                        {
                            sect_name = string.Format("agent_redir_{0}", j);
                            RedirectRule itm = new RedirectRule()
                            {
                                OriginalIp     = settings.ReadValue(commonSettingsPath, sect_name, "src_ip"),
                                OriginalPort   = int.Parse(settings.ReadValue(commonSettingsPath, sect_name, "src_port")),
                                NewIp          = settings.ReadValue(commonSettingsPath, sect_name, "dest_ip"),
                                NewPort        = int.Parse(settings.ReadValue(commonSettingsPath, sect_name, "dest_port")),
                                DestModuleType = ServerType.AgentServer
                            };
                            logmgr.WriteLog(LogLevel.Notify, "src {0}:{1} dest {2}:{3}", itm.OriginalIp, itm.OriginalPort, itm.NewIp, itm.NewPort);


                            RedirectRules.Add(itm);
                        }

                        if (nAgentRedirCount > 0)
                        {
                            logmgr.WriteLog(LogLevel.Notify, "Loaded {0} agent redirect rules", nAgentRedirCount);
                        }
                        else
                        {
                            logmgr.WriteLog(LogLevel.Notify, "No agent redirect rules given");
                        }
                    }
                    catch
                    {
                        logmgr.WriteLog(LogLevel.Warning, "No download redirect rules to load or error in format");
                    }
                }
                #endregion



                PacketDispatcher        packetProcessor         = new PacketDispatcher();
                DelayedPacketDispatcher delayedPacketDispatcher = new DelayedPacketDispatcher();


                #region Gateway message handlers

                if (MyServerType == ServerType.GatewayServer)
                {
                    packetProcessor.RegisterClientMsg(0x6102, new PacketHandler(UserLogin.HandleClient));
                    packetProcessor.RegisterModuleMsg(0xA101, new PacketHandler(ServerListResponse.HandleModule));

                    packetProcessor.RegisterModuleMsg(0x2322, new PacketHandler(AutoCaptcha.HandleClient));
                    packetProcessor.RegisterModuleMsg(0xA102, new PacketHandler(AgentRedirect.HandleModule));
                    packetProcessor.RegisterModuleMsg(0xA100, new PacketHandler(DownloadRedirect.HandleModule));

                    //Add gateway packets u want to log here
                    //run packetProcessor.LogAllModulePackets() and packetProcessor.LogAllClientPackets() method
                    //packetProcessor.RegisterModuleDebugMsg(0xA102);

                    packetProcessor.RegisterClientFilterMsg(0x631D);
                }
                #endregion

                #region Agent message handlers

                if (MyServerType == ServerType.AgentServer)
                {
                    packetProcessor.RegisterClientMsg(0x7001, new PacketHandler(CharSelect.HandleClient));
                    packetProcessor.RegisterClientMsg(0x7034, new PacketHandler(ItemMallBuy.HandleClient));
                    packetProcessor.RegisterClientMsg(0x3012, new PacketHandler(SilkDisplay.HandleClient));
                    packetProcessor.RegisterClientMsg(0x6103, new PacketHandler(UserAuth.HandleClient));
                    packetProcessor.RegisterClientMsg(0x7565, new PacketHandler(ItemMallToken.HandleClient));
                    packetProcessor.RegisterClientMsg(0x7074, new PacketHandler(SafeRegionSkill.HandleClient));
                    //packetProcessor.RegisterClientMsg(0x9738, new PacketHandler(ApiController.HandleClient));

                    packetProcessor.RegisterClientMsg(0x74D3, new PacketHandler(ArenaRegistration.HandleClient));
                    packetProcessor.RegisterClientMsg(0x74B2, new PacketHandler(FlagRegistration.HandleClient));

                    packetProcessor.RegisterClientMsg(0x7081, new PacketHandler(ExchangeRequest.HandleClient));
                    packetProcessor.RegisterClientMsg(0x7010, new PacketHandler(GmAccessControl.HandleClient));
                    packetProcessor.RegisterClientMsg(0x705A, new PacketHandler(WaterTempleTeleport.HandleClient));
                    packetProcessor.RegisterClientMsg(0x7005, new PacketHandler(LogoutRequest.HandleClient));
                    packetProcessor.RegisterClientMsg(0x7006, new PacketHandler(LogoutCancel.HandleClient));
                    packetProcessor.RegisterClientMsg(0x70B1, new PacketHandler(StallCooldown.HandleClient));
                    packetProcessor.RegisterClientMsg(0x7025, new PacketHandler(ChatMessage.HandleClient));
                    packetProcessor.RegisterClientMsg(0x7472, new PacketHandler(DisableAcademyInvite.HandleClient));
                    packetProcessor.RegisterClientMsg(0x7150, new PacketHandler(Alchemy.HandleClient));
                    packetProcessor.RegisterClientMsg(0x70F3, new PacketHandler(GuildInvite.HandleClient));
                    packetProcessor.RegisterClientMsg(0x70FB, new PacketHandler(UnionInvite.HandleClient));

                    packetProcessor.RegisterModuleMsg(0xB021, new PacketHandler(SafeRegion.HandleModule));
                    packetProcessor.RegisterModuleMsg(0xB0EA, new PacketHandler(StartIntro.HandleModule));
                    packetProcessor.RegisterModuleMsg(0x34D2, new PacketHandler(ArenaNotify.HandleModule));
                    packetProcessor.RegisterModuleMsg(0x3305, new PacketHandler(LoginNotice.HandleModule));

                    packetProcessor.RegisterModuleMsg(0x300C, new PacketHandler(StaticAnnounce.HandleModule));

                    //Add agent packets you want to log here
                    //If you want all packets logged, run packetProcessor.LogAllModulePackets() and packetProcessor.LogAllClientPackets() method
                    packetProcessor.LogAllClientPackets = true;
                    packetProcessor.LogAllModulePackets = true;
                }

                #endregion


                SilkroadServer currentServer = srvmgr.CreateNew(bind_addr, bind_port, module_addr, module_port, MyServerType, blowfish, sec_bytes, handshake, packetProcessor, delayedPacketDispatcher, RedirectRules);
                packetProcessor.AssignServer(currentServer);

                if (Global.EnablePacketLog)
                {
                    packetProcessor.LogAllClientPackets = true;
                    packetProcessor.LogAllModulePackets = true;
                }


                #region Delayed packets (timers)

                if (MyServerType == ServerType.AgentServer)
                {
                    try
                    {
                        if (Global.EnableAutoNotice)
                        {
                            int noticeCount = int.Parse(settings.ReadValue(autoNoticePath, "autonotice", "count"));
                            if (noticeCount > 0)
                            {
                                for (int j = 0; j < noticeCount; j++)
                                {
                                    string section = string.Format("notice_{0}", j);
                                    int    delay   = int.Parse(settings.ReadValue(autoNoticePath, section, "delay"));
                                    if (delay * 1000 < 20000)
                                    {
                                        logmgr.WriteLog(LogLevel.Notify, "Notice message delay too small ({0} < {1})", delay * 1000, 20000);
                                        continue;
                                    }
                                    string msg = settings.ReadValue(autoNoticePath, section, "msg");
                                    delayedPacketDispatcher.RegisterClientMsg(DelayedPacketProcessor.AutoNotice, currentServer, delay * 1000, msg);
                                }

                                if (noticeCount > 0)
                                {
                                    logmgr.WriteLog(LogLevel.Notify, "Loaded {0} auto-notice messages", noticeCount);
                                }
                                else
                                {
                                    logmgr.WriteLog(LogLevel.Notify, "No auto-notice messages loaded");
                                }
                            }
                        }
                    }
                    catch { Global.logmgr.WriteLog(LogLevel.Notify, "Failed to read auto notice list"); }

                    delayedPacketDispatcher.Start();
                }

                #endregion
            }

            //Since now do not output disabled log levels
            logmgr.ApplyLogSettings();

            //Enable log file output
            if (Global.EnableLogFile || Global.EnableChatLog)
            {
                logmgr.StartLogFileOutput();
                logmgr.WriteLog(LogLevel.Notify, "Log output started");
            }
        }
Ejemplo n.º 8
0
 public LoginSession(NetConnection connection, UserAccount account) : base(connection, account)
 {
     Account.LastLogin = DateTime.Now;
     dispatcher        = new PacketDispatcher <LoginHeader>();
     AddHandlers();
 }
Ejemplo n.º 9
0
        public static void Main()
        {
            var ports = SerialPort.GetPortNames();

            for (int i = 0; i < ports.Length; i++)
            {
                Console.WriteLine("{0}:{1}", i, ports[i]);
            }

            var strnum = Console.ReadKey().KeyChar.ToString();
            int num = -1;
            Console.WriteLine("\r\nOpening...");
            if (int.TryParse(strnum, out num))
            {
                var sport = new SerialPort(ports[num], 9600, Parity.None, 8, StopBits.One);
                sport.Encoding = Encoding.UTF8;
                sport.NewLine = "\n";
                sport.RtsEnable = true;
                sport.DtrEnable = true;
                sport.DiscardNull = false;
                sport.ReadTimeout = 10000;

                int counter = 0;
                while (true)
                {
                    try
                    {
                        if (sport.IsOpen)
                            sport.Close();

                        sport.Open();
                        break;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(counter);
                        System.Threading.Thread.Sleep(1000);
                        if (++counter > 10)
                            throw;
                    }
                }
                Console.WriteLine("opened successfully");

                var server = new PacketServer(sport.BaseStream);
                var dispatcher = new PacketDispatcher();
                var cens = dispatcher.GetTrainCensor(new DeviceID() { ParentPart = 1, ModulePart = 1 });
                server.AddAction(dispatcher);
                cens.PacketReceived += new PacketReceivedDelegate((dev, args) => Console.WriteLine(dev.ToString()));
                server.LoopStart();

                while (true)
                {
                    System.Threading.Thread.Sleep(100);
                }

                //bool sta = true, stab = false;
                //var watch = new System.Diagnostics.Stopwatch();
                //while (sport.IsOpen)
                //{
                //    //char[] buf = new char[64];
                //    //sport.Read(buf, 0, 64);

                //    //var output = new string(buf, 16, 48);
                //    //Console.WriteLine(output);
                //    string context = "";// sport.ReadLine();
                //    byte[] buffer = new byte[256];
                //    sport.Read(buffer, 0, 8);

                //    int startIndex = 0;
                //    int tmp = 0;

                //    while (!int.TryParse(context[startIndex].ToString(), out tmp))
                //        startIndex++;

                //    var val = float.Parse(context.Substring(startIndex, context.Length - startIndex).Trim().Split(',')[0]);
                //    if (!stab && val <= 2.0)
                //    {
                //        Console.WriteLine("{0} detecting", DateTime.Now.ToString());

                //        stab = true;
                //        if (sta) // first
                //        {
                //            watch.Restart();
                //            sta = false;
                //        }
                //        else
                //        {
                //            watch.Stop();
                //            if (watch.Elapsed.TotalSeconds < 5.0)
                //            {
                //                Console.WriteLine("{0}sec. v={1}m/s", watch.Elapsed.TotalSeconds, 0.05 / watch.Elapsed.TotalSeconds);
                //                sta = true;
                //            }
                //            else
                //            {
                //                // modify meisuring position
                //                watch.Restart();
                //                sta = false ;
                //            }
                //        }
                //    }
                //    else if (stab && val > 2.0)
                //    {
                //        stab = false;
                //        Console.WriteLine("{0} detected", DateTime.Now.ToString());

                //    }

                //}
            }
        }
Ejemplo n.º 10
0
 public PacketDispatcher_Test()
 {
     m_Dispatcher = new PacketDispatcher();
     m_Packet     = new Packet(Protocol.EPacket.Client_Hello, new byte[0]);
 }
Ejemplo n.º 11
0
        //-----------------------------------------------------------------------------

        public SilkroadServer CreateNew(string bind_addr, int bind_port, string module_addr, int module_port, ServerType srvtype, bool blowfish, bool sec_bytes, bool handshake, PacketDispatcher packetProcessor, DelayedPacketDispatcher delayedPacketDispatcher, List <RedirectRule> redirs = null)
        {
            if (BindExists(bind_addr, bind_port))
            {
                Global.logmgr.WriteLog(LogLevel.Error, "Server with given bind address already exists [{0}:{1}]", bind_addr, bind_port);
                return(null);
            }
            try
            {
                SilkroadServer ServerItem =
                    new SilkroadServer(
                        new IPEndPoint(IPAddress.Parse(bind_addr), bind_port),
                        new IPEndPoint(IPAddress.Parse(module_addr), module_port),
                        srvtype,
                        blowfish,
                        sec_bytes,
                        handshake,
                        packetProcessor,
                        delayedPacketDispatcher,
                        redirs
                        );

                m_servers.Add(ServerItem);
                ServerItem.Start();
                return(ServerItem);
            }
            catch
            {
                Global.logmgr.WriteLog(LogLevel.Error, "ServerManager failed to start server, SilkroadServer start error");
            }
            return(null);
        }
Ejemplo n.º 12
0
        public static void Run()
        {
            EventSink.Instance = new EventSink();

            if (!ScriptCompiler.Compile(Environment.Debug))
            {
                Console.WriteLine("Fatal: Compilation failed. Press any key to exit.");
                Console.ReadLine();
                return;
            }

            ScriptCompiler.VerifyLibraries();

            // This instance is shared among timer scheduler and timer executor,
            // and accessed from both core & timer threads.
            Queue <Timer> timerQueue = new Queue <Timer>();

            // Timer scheduler must be set up before world load, since world load
            // could schedule timers on entity deserialization.
            var timerScheduler = TimerScheduler.Instance = new TimerScheduler(timerQueue);

            m_TimerThread = new TimerThread(timerScheduler);

            TimerExecutor timerExecutor = new TimerExecutor(timerQueue);

            PacketHandlers.Instance = new PacketHandlers();

            try
            {
                ScriptCompiler.Configure();

                TileData.Configure();
            }
            catch (TargetInvocationException e)
            {
                Console.WriteLine("Fatal: Configure exception: {0}", e.InnerException);
                return;
            }

            Environment.SaveConfig();

            Region.Load();
            World.Instance.Load();

            try
            {
                ScriptCompiler.Initialize();
            }
            catch (TargetInvocationException e)
            {
                Logger.Error("Initialize exception: {0}", e.InnerException);
                return;
            }

            m_TimerThread.Start();

            NetServer netServer = new NetServer(new Listener(Listener.Port));

            netServer.Initialize();

            GameServer.Instance = new GameServer(netServer, PacketHandlers.Instance);
            GameServer.Instance.Initialize();

            EventSink.Instance.InvokeServerStarted();

            PacketDispatcher.Initialize();

            m_Now            = DateTime.UtcNow;
            m_TotalProfile   = new MainProfile(m_Now);
            m_CurrentProfile = new MainProfile(m_Now);

            try
            {
                while (!m_Closing)
                {
                    m_Now = DateTime.UtcNow;

                    Thread.Sleep(1);

                    ClockProfile(MainProfile.TimerId.Idle);

                    Mobile.ProcessDeltaQueue();

                    ClockProfile(MainProfile.TimerId.MobileDelta);

                    Item.ProcessDeltaQueue();

                    ClockProfile(MainProfile.TimerId.ItemDelta);

                    timerExecutor.Slice();

                    ClockProfile(MainProfile.TimerId.Timers);

                    netServer.Slice();

                    ClockProfile(MainProfile.TimerId.Network);

                    // Done with this iteration.
                    m_TotalProfile.Next();
                    m_CurrentProfile.Next();
                }
            }
            catch (Exception e)
            {
                HandleCrashed(e);
            }

            m_TimerThread.Stop();
        }
Ejemplo n.º 13
0
 public GameSession(NetConnection connection, UserAccount account) : base(connection, account)
 {
     dispatcher = new PacketDispatcher <GameHeader>();
     AddHandlers();
 }