public static void Initialize(ProudNet.Configuration config) { if (Instance != null) { throw new InvalidOperationException("Server is already initialized"); } config.Version = new Guid("{97d36acf-8cc0-4dfb-bcc9-97cab255e2bc}"); config.MessageFactories = new MessageFactory[] { new ChatMessageFactory() }; config.SessionFactory = new ChatSessionFactory(); config.Logger = Logger.ForContext(Constants.SourceContextPropertyName, "ChatServer-ProudNet"); // 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 config.MessageHandlers = new IMessageHandler[] { new FilteredMessageHandler <ChatSession>() .AddHandler(new AuthService()) .AddHandler(new CommunityService()) .AddHandler(new ChannelService()) .AddHandler(new PrivateMessageService()) .RegisterRule <CLoginReqMessage>(MustNotBeLoggedIn) .RegisterRule <CSetUserDataReqMessage>(MustBeLoggedIn) .RegisterRule <CGetUserDataReqMessage>(MustBeLoggedIn, MustBeInChannel) .RegisterRule <CDenyChatReqMessage>(MustBeLoggedIn) .RegisterRule <CChatMessageReqMessage>(MustBeLoggedIn, MustBeInChannel) .RegisterRule <CWhisperChatMessageReqMessage>(MustBeLoggedIn, MustBeInChannel) .RegisterRule <CNoteListReqMessage>(MustBeLoggedIn, MustBeInChannel) .RegisterRule <CReadNoteReqMessage>(MustBeLoggedIn, MustBeInChannel) .RegisterRule <CDeleteNoteReqMessage>(MustBeLoggedIn, MustBeInChannel) .RegisterRule <CSendNoteReqMessage>(MustBeLoggedIn, MustBeInChannel) }; Instance = new ChatServer(config); }
public static void Initialize(Configuration config) { if (Instance != null) { throw new InvalidOperationException("Server is already initialized"); } config.Version = new Guid("{97d36acf-8cc0-4dfb-bcc9-97cab255e2bc}"); config.MessageFactories = new MessageFactory[] { new ChatMessageFactory(), new ClubMessageFactory() }; config.SessionFactory = new ChatSessionFactory(); // 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 config.MessageHandlers = new IMessageHandler[] { new FilteredMessageHandler <ChatSession>() .AddHandler(new AuthService()) .AddHandler(new CommunityService()) .AddHandler(new ChannelService()) .AddHandler(new PrivateMessageService()) .AddHandler(new ClubService()) .RegisterRule <LoginReqMessage>(MustNotBeLoggedIn) .RegisterRule <UserDataOneReqMessage>(MustBeLoggedIn, MustBeInChannel) .RegisterRule <DenyActionReqMessage>(MustBeLoggedIn) .RegisterRule <MessageChatReqMessage>(MustBeLoggedIn, MustBeInChannel) .RegisterRule <MessageWhisperChatReqMessage>(MustBeLoggedIn, MustBeInChannel) .RegisterRule <NoteListReqMessage>(MustBeLoggedIn, MustBeInChannel) .RegisterRule <NoteReadReqMessage>(MustBeLoggedIn, MustBeInChannel) .RegisterRule <NoteDeleteReqMessage>(MustBeLoggedIn, MustBeInChannel) .RegisterRule <NoteSendReqMessage>(MustBeLoggedIn, MustBeInChannel) }; Instance = new ChatServer(config); }
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(); }