コード例 #1
0
        private GameServer(Configuration config)
            : base(config)
        {
            RegisterMappings();

            //Logger.Information("To get sure that u know how to work with this server, i've added this");
            //Logger.Information("Remove the lines located in the given file named by this log's prefix");
            //
            ////
            //Environment.Exit(-1);
            ////

            //ServerTime = TimeSpan.Zero;

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

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

            _worker            = new ThreadLoop(TimeSpan.FromMilliseconds(100), Worker);
            _serverlistManager = new ServerlistManager();
        }
コード例 #2
0
        private GameServer(Configuration config)
            : base(config)
        {
            RegisterMappings();
            CommandManager = new CommandManager(this);
            CommandManager.Add(new ServerCommand())
            .Add(new ReloadCommand())
            .Add(new GameCommands())
            .Add(new BanCommands())
            .Add(new UnbanCommands())
            .Add(new UserkickCommand())
            //.Add(new UserkickCommand())
            .Add(new AdminCommands())
            .Add(new NoticeCommand())
            .Add(new ClanCommands())
            .Add(new InventoryCommands());

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

            _worker            = new ThreadLoop(TimeSpan.FromMilliseconds(100), Worker);
            _serverlistManager = new ServerlistManager();
        }
コード例 #3
0
        private GameServer(Configuration config)
            : base(config)
        {
            RegisterMappings();

            //ServerTime = TimeSpan.Zero;

            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);
            _serverlistManager = new ServerlistManager();
        }
コード例 #4
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($"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 GameMessageFactory()));

            // ReSharper disable InconsistentNaming
            Predicate <GameSession> MustBeLoggedIn     = session => session.IsLoggedIn();
            Predicate <GameSession> MustNotBeLoggedIn  = session => !session.IsLoggedIn();
            Predicate <GameSession> MustBeInChannel    = session => session.Player.Channel != null;
            Predicate <GameSession> MustNotBeInChannel = session => session.Player.Channel == null;
            Predicate <GameSession> MustBeInRoom       = session => session.Player.Room != null;
            Predicate <GameSession> MustNotBeInRoom    = session => session.Player.Room == null;
            Predicate <GameSession> MustBeRoomHost     = session => session.Player.Room.Host == session.Player;
            Predicate <GameSession> MustBeRoomMaster   = session => session.Player.Room.Master == session.Player;
            // ReSharper restore InconsistentNaming

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

            .Register <CLoginReqMessage>(MustNotBeLoggedIn)
            .Register <CCreateCharacterReqMessage>(MustBeLoggedIn)
            .Register <CSelectCharacterReqMessage>(MustBeLoggedIn)
            .Register <CDeleteCharacterReqMessage>(MustBeLoggedIn)
            .Register <CAdminShowWindowReqMessage>(MustBeLoggedIn)
            .Register <CAdminActionReqMessage>(MustBeLoggedIn)
            .Register <CGetChannelInfoReqMessage>(MustBeLoggedIn)
            .Register <CChannelEnterReqMessage>(MustBeLoggedIn, MustNotBeInChannel)
            .Register <CChannelLeaveReqMessage>(MustBeLoggedIn, MustBeInChannel)
            .Register <CNewShopUpdateCheckReqMessage>(MustBeLoggedIn)
            .Register <CLicensedReqMessage>(MustBeLoggedIn, MustBeInChannel)
            .Register <CExerciseLicenceReqMessage>(MustBeLoggedIn, MustBeInChannel)
            .Register <CBuyItemReqMessage>(MustBeLoggedIn)
            .Register <CRandomShopRollingStartReqMessage>(MustBeLoggedIn)
            .Register <CRandomShopItemSaleReqMessage>(MustBeLoggedIn)
            .Register <CUseItemReqMessage>(MustBeLoggedIn)
            .Register <CRepairItemReqMessage>(MustBeLoggedIn)
            .Register <CRefundItemReqMessage>(MustBeLoggedIn)
            .Register <CDiscardItemReqMessage>(MustBeLoggedIn)
            .Register <CEnterPlayerReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom, session => session.Player.RoomInfo.IsConnecting)
            .Register <CMakeRoomReqMessage>(MustBeLoggedIn, MustBeInChannel, MustNotBeInRoom)
            .Register <CGameRoomEnterReqMessage>(MustBeLoggedIn, MustBeInChannel, MustNotBeInRoom)
            .Register <CJoinTunnelInfoReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom)
            .Register <CChangeTeamReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom)
            .Register <CPlayerGameModeChangeReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom)
            .Register <CScoreKillReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom)
            .Register <CScoreKillAssistReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom)
            .Register <CScoreOffenseReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom)
            .Register <CScoreOffenseAssistReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom)
            .Register <CScoreDefenseReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom)
            .Register <CScoreDefenseAssistReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom)
            .Register <CScoreTeamKillReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom)
            .Register <CScoreHealAssistReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom)
            .Register <CScoreSuicideReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom)
            .Register <CScoreReboundReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom, MustBeRoomHost,
                                                session => session.Player.RoomInfo.State != PlayerState.Lobby &&
                                                session.Player.RoomInfo.State != PlayerState.Spectating)
            .Register <CScoreGoalReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom, MustBeRoomHost,
                                             session => session.Player.RoomInfo.State != PlayerState.Lobby &&
                                             session.Player.RoomInfo.State != PlayerState.Spectating)
            .Register <CBeginRoundReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom, MustBeRoomMaster)
            .Register <CReadyRoundReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom, session => session.Player.RoomInfo.State == PlayerState.Lobby)
            .Register <CEventMessageReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom)
            .Register <CItemsChangeReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom, session => session.Player.RoomInfo.State == PlayerState.Lobby)
            .Register <CAvatarChangeReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom,
                                                session => session.Player.RoomInfo.State == PlayerState.Lobby ||
                                                session.Player.Room.GameRuleManager.GameRule.StateMachine.IsInState(GameRuleState.HalfTime))
            .Register <CChangeRuleNotifyReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom, MustBeRoomMaster,
                                                    session => session.Player.Room.GameRuleManager.GameRule.StateMachine.IsInState(GameRuleState.Waiting))
            .Register <CClubAddressReqMessage>(MustBeLoggedIn, MustBeInChannel)
            .Register <CClubInfoReqMessage>(MustBeLoggedIn, MustBeInChannel)
            .Register <CLeavePlayerRequestReqMessage>(MustBeLoggedIn, MustBeInChannel, MustBeInRoom);

            Pipeline.AddLast("s4_service", new MessageHandlerPipe())
            .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);
            _serverlistManager = new ServerlistManager();
        }