コード例 #1
0
        public Server(ServerSettings settings)
        {
            // Attempt to load world
            if (!File.Exists(settings.SavePath))
            {
                throw new FileNotFoundException("Save file not found.");
            }

            string         worldData      = File.ReadAllText(settings.SavePath);
            WorldStateData worldStateData = new WorldStateData(worldData);

            this.settings = settings;
            SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
            processorContext = new ServerProcessorContext(this);

            router = new PacketRouter(processorContext);
            foreach (PacketProcessor packetProcessor in PacketProcessor.GetProcessors())
            {
                router.RegisterPacketProcessor(packetProcessor);
            }

            playerConnections        = new Dictionary <Guid, long>();
            playerManager            = new PlayerManager(this);
            simulationManager        = new SimulationManager(this);
            worldStateManager        = new WorldStateManager(this, settings.SavePath, worldStateData);
            worldRequestQueueManager = new WorldRequestQueueManager(this);
            timeManager        = new TimeManager(this);
            environmentManager = new EnvironmentManager(this);
            disasterManager    = new DisasterManager(this);
            Initialize();
        }
コード例 #2
0
ファイル: Server.cs プロジェクト: kOchirasu/Maple2
 protected Server(ushort port, PacketRouter <T> router, ILogger logger, IComponentContext context)
 {
     this.port    = port;
     this.router  = router;
     this.logger  = logger;
     this.context = context ?? throw new ArgumentException("null context provided");
 }
コード例 #3
0
        public NecServer(NecSetting setting)
        {
            Setting       = setting;
            Router        = new PacketRouter();
            _authConsumer = new NecQueueConsumer(Setting);
            _authConsumer.SetIdentity("Auth");
            _msgConsumer = new NecQueueConsumer(Setting);
            _msgConsumer.SetIdentity("Msg");
            _areaConsumer = new NecQueueConsumer(Setting);
            _areaConsumer.SetIdentity("Area");

            _authServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.AuthPort,
                _authConsumer
                );

            _msgServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.MsgPort,
                _msgConsumer
                );

            _areaServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.AreaPort,
                _areaConsumer
                );

            LoadHandler();
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: jkloop45/d3sharp
 private void InitializeServerEvents()
 {
     _server.ClientConnected    += (sender, e) => Logger.Trace("Client connected: {0}", e.Client.ToString());
     _server.ClientDisconnected += (sender, e) => Logger.Trace("Client disconnected: {0}", e.Client.ToString());
     _server.DataReceived       += (sender, e) => PacketRouter.Route(e);
     _server.DataSent           += (sender, e) => { };
 }
コード例 #5
0
        private BaseClient(string playerName, Rooms rooms, PlayerChannels playerChannels, RoomChannels roomChannels)
        {
            if (playerName == null)
            {
                throw new ArgumentNullException("playerName");
            }
            if (rooms == null)
            {
                throw new ArgumentNullException("rooms");
            }
            if (playerChannels == null)
            {
                throw new ArgumentNullException("playerChannels");
            }
            if (roomChannels == null)
            {
                throw new ArgumentNullException("roomChannels");
            }

            Log = Logs.Create(LogCategory.Network, GetType().Name);

            _playerName = playerName;

            _byteBufferPool = new ConcurrentPool <byte[]>(10, () => new byte[1024]);
            _queuedUnreliableTransmissions = new TransferBuffer <ArraySegment <byte> >(16);
            _queuedReliableTransmissions   = new TransferBuffer <ArraySegment <byte> >(16);
            _queuedEvents = new List <NetworkEvent>();

            _peers                = new PeerCollection(this);
            _channels             = new ChannelCollection(_peers.RoutingTable, playerChannels, roomChannels);
            _connectionNegotiator = new ConnectionNegotiator(this);
            _router               = new PacketRouter(this, _connectionNegotiator);
            _commsProcessor       = new CommsProcessor(this, _peers.RoutingTable, rooms, _channels);
            _roomsManager         = new RoomMembershipManager(this, _connectionNegotiator, rooms);
        }
コード例 #6
0
 private void InitializeProcessors()
 {
     router = new PacketRouter(processorContext);
     foreach (PacketProcessor packetProcessor in PacketProcessor.GetProcessors())
     {
         router.RegisterPacketProcessor(packetProcessor);
     }
 }
コード例 #7
0
    public Server(PacketRouter <T> router, IComponentContext context)
    {
        Trace.Assert(context != null);

        Source          = new();
        ClientConnected = new(false);
        Router          = router;
        Context         = context;
    }
コード例 #8
0
        public NecServer(NecSetting setting)
        {
            _running = false;
            Setting  = new NecSetting(setting);

            NecromancyBot = new NecromancyBot(setting);
            NecromancyBot.AddSingleton(this);

            Instances         = new InstanceGenerator();
            Instances64       = new InstanceGenerator64();
            Clients           = new ClientLookup();
            Characters        = new CharacterLookup();
            Maps              = new MapLookup();
            Chat              = new ChatManager(this);
            Router            = new PacketRouter();
            Database          = new NecDatabaseBuilder().Build(Setting.DatabaseSettings);
            SettingRepository = new SettingRepository(Setting.RepositoryFolder).Initialize();
            _authConsumer     = new NecQueueConsumer(ServerType.Auth, Setting, Setting.AuthSocketSettings);
            _authConsumer.ClientDisconnected += AuthClientDisconnected;
            _msgConsumer = new NecQueueConsumer(ServerType.Msg, Setting, Setting.MsgSocketSettings);
            _msgConsumer.ClientDisconnected += MsgClientDisconnected;
            _areaConsumer = new NecQueueConsumer(ServerType.Area, Setting, Setting.AreaSocketSettings);
            _areaConsumer.ClientDisconnected += AreaClientDisconnected;

            _authServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.AuthPort,
                _authConsumer,
                Setting.AuthSocketSettings
                );

            _msgServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.MsgPort,
                _msgConsumer,
                Setting.MsgSocketSettings
                );

            _areaServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.AreaPort,
                _areaConsumer,
                Setting.AreaSocketSettings
                );

            LoadChatCommands();
            LoadSettingRepository();
            LoadHandler();
            LoadCharacterRepository();
        }
コード例 #9
0
ファイル: NetService.cs プロジェクト: merlox/roshambo
        public virtual void InitializeService(INetContext context)
        {
            Context         = context;
            scheduledEvents = new List <Tuple <DateTime, Action> >();

            if (IsClient)
            {
                Router = new PacketRouter(Client.Router, GetRouterPrefix());
            }
            if (IsServer)
            {
                Router = new PacketRouter(Server.Router, GetRouterPrefix());
            }
        }
コード例 #10
0
        public NetRoomControllerChannels(PacketRouter router)
        {
            this.MatchCreatedEventChannel = router.Route <MatchCreatedEventModel>();
            this.RoomEndedEventChannel    = router.Route <RoomEndedEventModel>();
            this.RoomStartedEventChannel  = router.Route <RoomStartedEventModel>();
            this.UserJoinedEventChannel   = router.Route <UserJoinedEventModel>();
            this.UserLeftEventChannel     = router.Route <UserLeftEventModel>();

            this.CloseRoomRequestChannel     = router.Route <CloseRoomRequest>();
            this.CreateMatchRequestChannel   = router.Route <CreateMatchRequest>();
            this.GetMatchListRequestChannel  = router.Route <GetMatchListRequest>();
            this.GetMatchListResponseChannel = router.Route <GetMatchListResponse>();
            this.StartRoomRequestChannel     = router.Route <StartRoomRequest>();
            this.JoinMatchRequestChannel     = router.Route <JoinMatchRequest>();
        }
コード例 #11
0
        public NecServer(NecSetting setting)
        {
            _running     = false;
            this.setting = new NecSetting(setting);

            necromancyBot = new NecromancyBot(this.setting);
            necromancyBot.AddSingleton(this);
            instances         = new InstanceGenerator(this);
            clients           = new ClientLookup();
            maps              = new MapLookup();
            chat              = new ChatManager(this);
            router            = new PacketRouter();
            settingRepository = new SettingRepository(this.setting.repositoryFolder).Initialize();
            database          = new NecDatabaseBuilder(this.setting, settingRepository).Build();
            _authConsumer     = new NecQueueConsumer(ServerType.Auth, this.setting, this.setting.authSocketSettings);
            _authConsumer.clientDisconnected += AuthClientDisconnected;
            _msgConsumer = new NecQueueConsumer(ServerType.Msg, this.setting, this.setting.msgSocketSettings);
            _msgConsumer.clientDisconnected += MsgClientDisconnected;
            _areaConsumer = new NecQueueConsumer(ServerType.Area, this.setting, this.setting.areaSocketSettings);
            _areaConsumer.clientDisconnected += AreaClientDisconnected;

            _authServer = new AsyncEventServer(
                this.setting.listenIpAddress,
                this.setting.authPort,
                _authConsumer,
                this.setting.authSocketSettings
                );

            _msgServer = new AsyncEventServer(
                this.setting.listenIpAddress,
                this.setting.msgPort,
                _msgConsumer,
                this.setting.msgSocketSettings
                );

            _areaServer = new AsyncEventServer(
                this.setting.listenIpAddress,
                this.setting.areaPort,
                _areaConsumer,
                this.setting.areaSocketSettings
                );

            LoadChatCommands();
            LoadDatabaseObjects();
            LoadHandler();
        }
コード例 #12
0
        public NetMatchControllerChannels(PacketRouter router)
        {
            this.MatchEndedEventChannel   = router.Route <MatchEndedEventModel>();
            this.MatchStartedEventChannel = router.Route <MatchStartedEventModel>();

            this.RoundCreatedEventChannel = router.Route <RoundCreatedEventModel>();
            this.RoundEndedEventChannel   = router.Route <RoundEndedEventModel>();

            this.UserJoinedEventChannel = router.Route <UserJoinedEventModel>();
            this.UserLeftEventChannel   = router.Route <UserLeftEventModel>();

            this.StartMatchRequestChannel = router.Route <StartMatchRequest>();
            this.EndMatchRequestChannel   = router.Route <EndMatchRequest>();

            this.PlayCardRequestChannel  = router.Route <PlayCardRequest>();
            this.PlayCardResponseChannel = router.Route <PlayCardResponse>();
        }
コード例 #13
0
        protected BaseServer()
        {
            Log = Logs.Create(LogCategory.Network, GetType().Name);

            RecvClientState      = new TrafficCounter();
            RecvVoiceData        = new TrafficCounter();
            RecvTextData         = new TrafficCounter();
            RecvHandshakeRequest = new TrafficCounter();
            SentTraffic          = new TrafficCounter();

            _sessionId = unchecked ((uint)new Random().Next());
            Log.Debug("Session Id = {0}", _sessionId);

            _packetRouter = new PacketRouter <TPeer>(this);
            _clients      = new ClientCollection <TPeer>(this, _sessionId);

            _handshakeResponse = new PacketWriter(new byte[21]).WriteHandshakeResponse(_sessionId).Written;
        }
コード例 #14
0
        private void OnStartup(object sender, StartupEventArgs ev)
        {
            var cd = AppDomain.CurrentDomain;

            cd.UnhandledException += GlobalUnhandledExceptionHandler;
            System.Diagnostics.Process.GetCurrentProcess().PriorityClass = System.Diagnostics.ProcessPriorityClass.High;
            if (File.Exists(Environment.CurrentDirectory + "/TCCupdater.exe"))
            {
                File.Delete(Environment.CurrentDirectory + "/TCCupdater.exe");
            }
            UpdateManager.CheckAppVersion();
            UpdateManager.CheckDatabaseVersion();



            TeraSniffer.Instance.Enabled = true;
            WindowManager.Init();
            LoadSettings();
            PacketRouter.Init();

            TeraSniffer.Instance.NewConnection += (srv) => SkillManager.Clear();
            TeraSniffer.Instance.EndConnection += () => SkillManager.Clear();

            var LoadThread = new Thread(new ThreadStart(() =>
            {
                SkillsDatabase.Load();
                Console.WriteLine("Skills loaded.");
                BroochesDatabase.SetBroochesIcons();
                Console.WriteLine("Set brooches icons");
                MonsterDatabase.Populate();
                Console.WriteLine("Monsters loaded");
                AbnormalityDatabase.Load();
                Console.WriteLine("Abnormalities loaded");
                WindowManager.CooldownWindow.LoadingDone();
            }));

            SessionManager.CurrentPlayer.Class = Class.None;

            WindowManager.ShowWindow(WindowManager.CooldownWindow);
            LoadThread.Start();
            //Debug();
        }
コード例 #15
0
ファイル: MhfServer.cs プロジェクト: tlfmonster/mhf-server
        public MhfServer(MhfSetting setting)
        {
            Setting = new MhfSetting(setting);

            LogProvider.Configure <MhfLogger>(Setting);
            _logger = LogProvider.Logger <MhfLogger>(this);

            Instances = new InstanceGenerator();
            Clients   = new ClientLookup();
            Router    = new PacketRouter();
            Database  = new MhfDatabaseBuilder().Build(Setting.DatabaseSetting);

            _authConsumer = new QueueConsumer(Setting, Setting.ServerSocketSettings);
            _authConsumer.ClientDisconnected += AuthClientDisconnected;
            _authServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.AuthServerPort,
                _authConsumer,
                Setting.ServerSocketSettings
                );

            _lobbyConsumer = new QueueConsumer(Setting, Setting.ServerSocketSettings);
            _lobbyConsumer.ClientDisconnected += LobbyClientDisconnected;
            _lobbyServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.LobbyServerPort,
                _lobbyConsumer,
                Setting.ServerSocketSettings
                );

            _webServer = new WebServer(Setting, new KestrelWebServer(Setting));

            WebFileProvider = new PhysicalFileProvider(Setting.WebSetting.WebFolder);

            LoadPacketHandler();
            LoadWebRoutes();
        }
コード例 #16
0
        public NecServer(NecSetting setting)
        {
            ClientLookup  = new ClientLookup();
            MapLookup     = new MapLookup();
            Setting       = setting;
            Router        = new PacketRouter();
            _authConsumer = new NecQueueConsumer(Setting);
            _authConsumer.SetIdentity("Auth");
            _authConsumer.ClientDisconnected += AuthClientDisconnected;
            _msgConsumer = new NecQueueConsumer(Setting);
            _msgConsumer.SetIdentity("Msg");
            _msgConsumer.ClientDisconnected += MsgClientDisconnected;
            _areaConsumer = new NecQueueConsumer(Setting);
            _areaConsumer.SetIdentity("Area");
            _areaConsumer.ClientDisconnected += AreaClientDisconnected;

            _authServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.AuthPort,
                _authConsumer
                );

            _msgServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.MsgPort,
                _msgConsumer
                );

            _areaServer = new AsyncEventServer(
                Setting.ListenIpAddress,
                Setting.AreaPort,
                _areaConsumer
                );

            LoadHandler();
        }
コード例 #17
0
ファイル: LoginServer.cs プロジェクト: kOchirasu/Maple2
 public LoginServer(PacketRouter <LoginSession> router, ILogger <LoginServer> logger, IComponentContext context)
     : base(Target.LOGIN_PORT, router, logger, context)
 {
 }
コード例 #18
0
 public LoginServer(PacketRouter <LoginSession> router, ILogger <LoginServer> logger, IComponentContext context)
     : base(router, logger, context)
 {
 }
コード例 #19
0
        internal async static void PacketReceived(Packet packet, Stream stream)
        {
            
            //Handle Direct return messages : it is possible this should be placed in the packet class!
            if (packet.Header == PacketHeaderType.CommandStationOperationResponse && packet.Payload[0] == Convert.ToByte(PacketIdentifier.CommandStationOperationResponse.TransferErrors))
            {
                var ackResp = new AckRespMessage();
                //if (XpressNetConstants.UseAsyncWrite)
                //{
                //    //ackResp.WriteAsync(stream);
                //}
                //else
                //{
                    await ackResp.WriteAsync(stream);
                //}
            }
            
            //Handle Broadcast Messages

            if (packet.Header == PacketHeaderType.EmergencyStopAll) 
            {
                var bmr = new BroadcastMessageReceivedEventArgs
                {
                    ResponseType = BroadcastType.EmergencyStop,
                    ReceivedTime = DateTime.Now
                };
                OnBroadcastMessageReceived(bmr);

                
            } 
            else if (packet.Header == PacketHeaderType.CommandStationOperationResponse && packet.Payload[0] == Convert.ToByte(PacketIdentifier.CommandStationOperationResponse.NormalOperationsResumedBroadcast))
            {
                var bmr = new BroadcastMessageReceivedEventArgs
                {
                    ResponseType = BroadcastType.NormalOperationResumed,
                    ReceivedTime = DateTime.Now
                };
                OnBroadcastMessageReceived(bmr);
            }
            else if (packet.Header == PacketHeaderType.CommandStationOperationResponse && packet.Payload[0] == Convert.ToByte(PacketIdentifier.CommandStationOperationResponse.TrackPowerOffBroadcast))
            {
                var bmr = new BroadcastMessageReceivedEventArgs
                {
                    ResponseType = BroadcastType.TrackPowerOff,
                    ReceivedTime = DateTime.Now
                };
                OnBroadcastMessageReceived(bmr);
            }
            else if (packet.Header == PacketHeaderType.CommandStationOperationResponse && packet.Payload[0] == Convert.ToByte(PacketIdentifier.CommandStationOperationResponse.ServiceModeEntryBroadcast))
            {
                var bmr = new BroadcastMessageReceivedEventArgs
                {
                    ResponseType = BroadcastType.ServiceModeEntry,
                    ReceivedTime = DateTime.Now
                };
                OnBroadcastMessageReceived(bmr);
            }
            else if (packet.Header == PacketHeaderType.AccessoryDecoderInformation)
            {
                var bmr = new BroadcastMessageReceivedEventArgs
                {
                    ResponseType = BroadcastType.AccessoryFeedback,
                    ReceivedTime = DateTime.Now
                };
                //bmr.Response = 
                OnBroadcastMessageReceived(bmr);
            }
            //else if (packet.Header == PacketHeaderType.LocomotiveFunction && packet.Payload[0] == Convert.ToByte(PacketIdentifier.LocomotiveFunctionResponses.LocomotiveOperatedByAnotherDevice))
            //{
            //BroadcastMessageReceivedEventArgs bmr = new BroadcastMessageReceivedEventArgs();
            //bmr.ResponseType = BroadcastType.LocomotiveOperatedByAnotherDevice;
            //bmr.Response = 
            //OnBroadcastMessageReceived(bmr);
            //}
            //else if (packet.Header == PacketHeaderType.LocomotiveFunction && packet.Payload[0] == Convert.ToByte(PacketIdentifier.LocomotiveFunctionResponses.LocomotiveDoubleHeaderOccupied))
            //{
            //BroadcastMessageReceivedEventArgs bmr = new BroadcastMessageReceivedEventArgs();
            //bmr.ResponseType = BroadcastType.DoubleHeaderOccupied;
            //bmr.Response = 
            //OnBroadcastMessageReceived(bmr);
            //}

            //else //we may wish to send the broadcasts on anyway so this else may have to be removed!!
            //{
                var pump = new PacketRouter();
                pump.DisseminatePacket(packet);
            //}
        }
コード例 #20
0
ファイル: GameServer.cs プロジェクト: kOchirasu/Maple2
 public GameServer(PacketRouter <GameSession> router, ILogger <GameServer> logger, IComponentContext context)
     : base(Target.GAME_PORT, router, logger, context)
 {
     this.sessions = new List <GameSession>();
 }
コード例 #21
0
 private void OnPacket(ClientSocket client, byte[] buffer) => PacketRouter.Route((Client)client.StateObject, buffer);
コード例 #22
0
 public MessageChannel(PacketRouter parent, string key, Type type)
 {
     this.SourceType = type;
     this.Parent     = parent;
     this.Key        = key;
 }