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(); }
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; }
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; }