Exemple #1
0
        public RelayServer(GameServer gameServer)
            : base(new RelaySessionFactory(), ArrayPool <byte> .Create(1 * 1024 * 1024, 50), Config.Instance.PlayerLimit)
        {
            GameServer = gameServer;

            #region Filter Setup

            var config = new ProudConfig(new Guid("{a43a97d1-9ec7-495e-ad5f-8fe45fde1151}"))
            {
                UdpListener = new IPEndPoint(Config.Instance.Listener.Address, 22000),
                UdpAddress  = IPAddress.Parse(Config.Instance.IP),
                EnableP2PEncryptedMessaging = false,
                EncryptedMessageKeyLength   = 0
                                              //EnableServerLog = true,
                                              //EmergencyLogLineCount = 1000
            };
            var proudFilter = new ProudServerPipe(config);
#if DEBUG
            proudFilter.UnhandledProudCoreMessage += (s, e) =>
            {
                //var unk = e.Message as CoreUnknownMessage;
                //if (unk != null)
                //_logger.Warn().Message("Unknown CoreMessage {0}: {1}", unk.OpCode, unk.Data.ToHexString()).Write();
                //else
                _logger.Warn().Message("Unhandled UnhandledProudCoreMessage {0}", e.Message.GetType().Name).Write();
            };
            proudFilter.UnhandledProudMessage += (s, e) =>
            {
                var unk = e.Message as ProudUnknownMessage;
                if (unk != null)
                {
                    _logger.Warn().Message("Unknown ProudMessage {0}: {1}", unk.OpCode, unk.Data.ToHexString()).Write();
                }
                else
                {
                    _logger.Warn().Message("Unhandled UnhandledProudMessage {0}", e.Message.GetType().Name).Write();
                }
            };
#endif
            Pipeline.AddFirst("proudnet", proudFilter);
            Pipeline.AddLast("s4_protocol", new NetspherePipe(new RelayMessageFactory()));

            Pipeline.AddLast("firewall", new FirewallPipe())
            .Add(new PacketFirewallRule <RelaySession>())
            .Get <PacketFirewallRule <RelaySession> >()

            .Register <CRequestLoginMessage>(s => !s.IsLoggedIn());

            //FilterList.AddLast("spam_filter", new SpamFilter { RepeatLimit = 15, TimeFrame = TimeSpan.FromSeconds(3) });

            Pipeline.AddLast("s4_service", new ServicePipe())
            .Add(new AuthService())
            .Add(new RelayService())
            .UnhandledMessage += OnUnhandledMessage;

            #endregion
        }
        public ChatServer(GameServer server)
            : base(new ChatSessionFactory(), ArrayPool <byte> .Create(1 * 1024 * 1024, 50), Config.Instance.PlayerLimit)
        {
            #region Filter Setup

            var config      = new ProudConfig(new Guid("{97d36acf-8cc0-4dfb-bcc9-97cab255e2bc}"));
            var proudFilter = new ProudServerPipe(config);
#if DEBUG
            proudFilter.UnhandledProudCoreMessage += (s, e) => Logger.Warn($"Unhandled ProudCoreMessage {e.Message.GetType().Name}");
            proudFilter.UnhandledProudMessage     +=
                (s, e) => Logger.Warn($"Unhandled UnhandledProudMessage {e.Message.GetType().Name}: {e.Message.ToArray().ToHexString()}");
#endif
            Pipeline.AddFirst("proudnet", proudFilter);
            Pipeline.AddLast("s4_protocol", new NetspherePipe(new ChatMessageFactory()));

            // ReSharper disable InconsistentNaming
            Predicate <ChatSession> MustBeLoggedIn    = session => session.IsLoggedIn();
            Predicate <ChatSession> MustNotBeLoggedIn = session => !session.IsLoggedIn();
            Predicate <ChatSession> MustBeInChannel   = session => session.Player.Channel != null;
            // ReSharper restore InconsistentNaming

            Pipeline.AddLast("firewall", new FirewallPipe())
            .Add(new PacketFirewallRule <ChatSession>())
            .Get <PacketFirewallRule <ChatSession> >()

            .Register <CLoginReqMessage>(MustNotBeLoggedIn)
            .Register <CSetUserDataReqMessage>(MustBeLoggedIn)
            .Register <CGetUserDataReqMessage>(MustBeLoggedIn, MustBeInChannel)
            .Register <CDenyChatReqMessage>(MustBeLoggedIn)
            .Register <CChatMessageReqMessage>(MustBeLoggedIn, MustBeInChannel)
            .Register <CWhisperChatMessageReqMessage>(MustBeLoggedIn, MustBeInChannel)
            .Register <CNoteListReqMessage>(MustBeLoggedIn, MustBeInChannel)
            .Register <CReadNoteReqMessage>(MustBeLoggedIn, MustBeInChannel)
            .Register <CDeleteNoteReqMessage>(MustBeLoggedIn, MustBeInChannel)
            .Register <CSendNoteReqMessage>(MustBeLoggedIn, MustBeInChannel);

            Pipeline.AddLast("s4_service", new MessageHandlerPipe())
            .Add(new AuthService())
            .Add(new CommunityService())
            .Add(new ChannelService())
            .Add(new PrivateMessageService())
            .UnhandledMessage += OnUnhandledMessage;

            #endregion

            GameServer = server;
        }
        private AuthServer()
            : base(new ProudSessionFactory(), ArrayPool <byte> .Create(1 * 1024 * 1024, Config.Instance.MaxConnections), Config.Instance.MaxConnections)
        {
            var config      = new ProudConfig(new Guid("{9be73c0b-3b10-403e-be7d-9f222702a38c}"));
            var proudFilter = new ProudServerPipe(config);

#if DEBUG
            proudFilter.UnhandledProudCoreMessage += OnUnhandledProudCoreMessage;
            proudFilter.UnhandledProudMessage     += OnUnhandledProudMessage;
#endif
            Pipeline.AddFirst("proudnet", proudFilter);
            Pipeline.AddLast("s4_protocol", new NetspherePipe(new AuthMessageFactory()));
            Pipeline.AddLast("s4_service", new MessageHandlerPipe())
            .Add(new AuthService())
            .UnhandledMessage += OnUnhandledMessage;

            _worker       = new TaskLoop(TimeSpan.FromSeconds(10), Worker);
            ServerManager = new ServerManager();
        }
Exemple #4
0
        public ChatServer(GameServer server)
            : base(new ChatSessionFactory(), ArrayPool <byte> .Create(1 * 1024 * 1024, 50), Config.Instance.PlayerLimit)
        {
            #region Filter Setup

            var config      = new ProudConfig(new Guid("{97d36acf-8cc0-4dfb-bcc9-97cab255e2bc}"));
            var proudFilter = new ProudServerPipe(config);
#if DEBUG
            proudFilter.UnhandledProudCoreMessage += (s, e) => _logger.Warn().Message("Unhandled ProudCoreMessage {0}", e.Message.GetType().Name).Write();
            proudFilter.UnhandledProudMessage     +=
                (s, e) => _logger.Warn().Message("Unhandled UnhandledProudMessage {0}: {1}", e.Message.GetType().Name, e.Message.ToArray().ToHexString()).Write();
#endif
            Pipeline.AddFirst("proudnet", proudFilter);
            Pipeline.AddLast("s4_protocol", new NetspherePipe(new ChatMessageFactory()));

            Pipeline.AddLast("firewall", new FirewallPipe())
            .Add(new PacketFirewallRule <ChatSession>())
            .Get <PacketFirewallRule <ChatSession> >()

            .Register <CLoginReqMessage>(s => !s.IsLoggedIn())
            .Register <CSetUserDataReqMessage>(s => s.IsLoggedIn())
            .Register <CGetUserDataReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null)
            .Register <CDenyChatReqMessage>(s => s.IsLoggedIn())
            .Register <CChatMessageReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null)
            .Register <CWhisperChatMessageReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null)
            .Register <CNoteListReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null)
            .Register <CReadNoteReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null)
            .Register <CDeleteNoteReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null)
            .Register <CSendNoteReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null);

            //Pipeline.AddLast("spam_filter", new SpamFilter { RepeatLimit = 30, TimeFrame = TimeSpan.FromSeconds(3) });

            Pipeline.AddLast("s4_service", new ServicePipe())
            .Add(new AuthService())
            .Add(new CommunityService())
            .Add(new ChannelService())
            .Add(new PrivateMessageService())
            .UnhandledMessage += OnUnhandledMessage;

            #endregion

            GameServer = server;
        }
Exemple #5
0
        private GameServer()
            : base(new GameSessionFactory(), ArrayPool <byte> .Create(1 * 1024 * 1024, 50), Config.Instance.PlayerLimit)
        {
            #region Filter Setup

            var config      = new ProudConfig(new Guid("{beb92241-8333-4117-ab92-9b4af78c688f}"));
            var proudFilter = new ProudServerPipe(config);
#if DEBUG
            proudFilter.UnhandledProudCoreMessage += (s, e) => Logger.Warn().Message("Unhandled ProudCoreMessage {0}", e.Message.GetType().Name).Write();
            proudFilter.UnhandledProudMessage     +=
                (s, e) => Logger.Warn().Message("Unhandled UnhandledProudMessage {0}: {1}", e.Message.GetType().Name, e.Message.ToArray().ToHexString()).Write();
#endif
            Pipeline.AddFirst("proudnet", proudFilter);
            Pipeline.AddLast("s4_protocol", new NetspherePipe(new GameMessageFactory()));

            Pipeline.AddLast("firewall", new FirewallPipe())
            .Add(new PacketFirewallRule <GameSession>())
            .Get <PacketFirewallRule <GameSession> >()

            .Register <CLoginReqMessage>(s => !s.IsLoggedIn())
            .Register <CCreateCharacterReqMessage>(s => s.IsLoggedIn())
            .Register <CSelectCharacterReqMessage>(s => s.IsLoggedIn())
            .Register <CDeleteCharacterReqMessage>(s => s.IsLoggedIn())
            .Register <CAdminShowWindowReqMessage>(s => s.IsLoggedIn())
            .Register <CAdminActionReqMessage>(s => s.IsLoggedIn())
            .Register <CGetChannelInfoReqMessage>(s => s.IsLoggedIn())
            .Register <CChannelEnterReqMessage>(s => s.IsLoggedIn() && s.Player.Channel == null)
            .Register <CChannelLeaveReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null)
            .Register <CNewShopUpdateCheckReqMessage>(s => s.IsLoggedIn())
            .Register <CLicensedReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null)
            .Register <CExerciseLicenceReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null)
            .Register <CBuyItemReqMessage>(s => s.IsLoggedIn())
            .Register <CRandomShopRollingStartReqMessage>(s => s.IsLoggedIn())
            .Register <CRandomShopItemSaleReqMessage>(s => s.IsLoggedIn())
            .Register <CUseItemReqMessage>(s => s.IsLoggedIn())
            .Register <CRepairItemReqMessage>(s => s.IsLoggedIn())
            .Register <CRefundItemReqMessage>(s => s.IsLoggedIn())
            .Register <CDiscardItemReqMessage>(s => s.IsLoggedIn())
            .Register <CEnterPlayerReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && s.Player.RoomInfo.IsConnecting)
            .Register <CMakeRoomReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room == null)
            .Register <CGameRoomEnterReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room == null)
            .Register <CJoinTunnelInfoReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null)
            .Register <CChangeTeamReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null)
            .Register <CPlayerGameModeChangeReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null)

            .Register <CScoreKillReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && s.Player.RoomInfo.State != PlayerState.Lobby && s.Player.RoomInfo.State != PlayerState.Spectating)
            .Register <CScoreKillAssistReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && s.Player.RoomInfo.State != PlayerState.Lobby && s.Player.RoomInfo.State != PlayerState.Spectating)
            .Register <CScoreOffenseReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && s.Player.RoomInfo.State != PlayerState.Lobby && s.Player.RoomInfo.State != PlayerState.Spectating)
            .Register <CScoreOffenseAssistReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && s.Player.RoomInfo.State != PlayerState.Lobby && s.Player.RoomInfo.State != PlayerState.Spectating)
            .Register <CScoreDefenseReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && s.Player.RoomInfo.State != PlayerState.Lobby && s.Player.RoomInfo.State != PlayerState.Spectating)
            .Register <CScoreDefenseAssistReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && s.Player.RoomInfo.State != PlayerState.Lobby && s.Player.RoomInfo.State != PlayerState.Spectating)
            .Register <CScoreTeamKillReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && s.Player.RoomInfo.State != PlayerState.Lobby && s.Player.RoomInfo.State != PlayerState.Spectating)
            .Register <CScoreHealAssistReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && s.Player.RoomInfo.State != PlayerState.Lobby && s.Player.RoomInfo.State != PlayerState.Spectating)
            .Register <CScoreSuicideReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && s.Player.RoomInfo.State != PlayerState.Lobby && s.Player.RoomInfo.State != PlayerState.Spectating)
            .Register <CScoreReboundReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && s.Player.Room.Host == s.Player && s.Player.RoomInfo.State != PlayerState.Lobby && s.Player.RoomInfo.State != PlayerState.Spectating)
            .Register <CScoreGoalReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && s.Player.Room.Host == s.Player && s.Player.RoomInfo.State != PlayerState.Lobby && s.Player.RoomInfo.State != PlayerState.Spectating)

            .Register <CBeginRoundReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && s.Player.Room.Master == s.Player)
            .Register <CReadyRoundReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && s.Player.RoomInfo.State == PlayerState.Lobby)
            .Register <CEventMessageReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null)
            .Register <CItemsChangeReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && s.Player.RoomInfo.State == PlayerState.Lobby)
            .Register <CAvatarChangeReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && (s.Player.RoomInfo.State == PlayerState.Lobby || s.Player.Room.GameRuleManager.GameRule.StateMachine.IsInState(GameRuleState.HalfTime)))
            .Register <CChangeRuleNotifyReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null && s.Player.Room != null && s.Player == s.Player.Room.Master && s.Player.Room.GameRuleManager.GameRule.StateMachine.IsInState(GameRuleState.Waiting))

            .Register <CClubAddressReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null)
            .Register <CClubInfoReqMessage>(s => s.IsLoggedIn() && s.Player.Channel != null);

            //FilterList.AddLast("spam_filter", new SpamFilter { RepeatLimit = 30, TimeFrame = TimeSpan.FromSeconds(3) });

            Pipeline.AddLast("s4_service", new ServicePipe())
            .Add(new AuthService())
            .Add(new CharacterService())
            .Add(new GeneralService())
            .Add(new AdminService())
            .Add(new ChannelService())
            .Add(new ShopService())
            .Add(new InventoryService())
            .Add(new RoomService())
            .Add(new ClubService())
            .UnhandledMessage += OnUnhandledMessage;

            #endregion

            RegisterMappings();

            //ServerTime = TimeSpan.Zero;
            _chatServer = new ChatServer(this);
            RelayServer = new RelayServer(this);

            CommandManager = new CommandManager(this);
            CommandManager.Add(new ServerCommand())
            .Add(new ReloadCommand())
            .Add(new GameCommands())
            .Add(new InventoryCommands());

            PlayerManager  = new PlayerManager();
            ResourceCache  = new ResourceCache();
            ChannelManager = new ChannelManager(ResourceCache.GetChannels());

            _worker     = new ThreadLoop(TimeSpan.FromMilliseconds(100), (Action <TimeSpan>)Worker);
            _authWebAPI = new AuthWebAPIClient();
        }
 public ProudCoreServerService(ProudServerPipe filter)
 {
     _filter = filter;
 }