示例#1
0
文件: WCFHost.cs 项目: SinaC/TetriNET
        public WCFHost(IPlayerManager playerManager, ISpectatorManager spectatorManager, IBanManager banManager, IFactory factory)
            : base(playerManager, spectatorManager, banManager, factory)
        {
            _serviceHost = new WCFServiceHost(this);

            _started = false;
        }
示例#2
0
        public Server(IPlayerManager playerManager, ISpectatorManager spectatorManager, IPieceProvider pieceProvider, IActionQueue gameActionQueue)
        {
            if (playerManager == null)
            {
                throw new ArgumentNullException(nameof(playerManager));
            }

            Options = new GameOptions();
            Options.ResetToDefault();

            _pieceProvider             = pieceProvider;
            _pieceProvider.Occurancies = () => Options.PieceOccurancies;
            _playerManager             = playerManager;
            _spectatorManager          = spectatorManager;
            _gameActionQueue           = gameActionQueue;
            _hosts = new List <IHost>();

            Assembly entryAssembly = Assembly.GetEntryAssembly();

            if (entryAssembly != null)
            {
                Version version = entryAssembly.GetName().Version;
                Version = new Versioning
                {
                    Major = version.Major,
                    Minor = version.Minor,
                };
            }// else, we suppose SetVersion will be called later, before connecting

            _gameStatistics = new Dictionary <string, GameStatisticsByPlayer>();

            _winList = new List <WinEntry>();

            State = ServerStates.WaitingStartServer;
        }
示例#3
0
        private IServer CreateServerWithHost()
        {
            _factory = new FactoryMock();
            IPlayerManager    playerManager    = _factory.CreatePlayerManager(6);
            ISpectatorManager spectatorManager = _factory.CreateSpectatorManager(10);
            IBanManager       banManager       = _factory.CreateBanManager();
            IPieceProvider    pieceProvider    = _factory.CreatePieceProvider();

            _host        = new HostBaseMock(playerManager, spectatorManager, banManager, _factory);
            _actionQueue = _factory.CreateActionQueue() as ActionQueueMock;
            IServer server = new TetriNET.Server.Server(playerManager, spectatorManager, pieceProvider, _actionQueue);

            server.AddHost(_host);
            return(server);
        }
示例#4
0
        private void ServiceMainLoop()
        {
            //
            IFactory factory = new Factory();
            //
            IBanManager banManager = factory.CreateBanManager();
            //
            IPlayerManager    playerManager    = factory.CreatePlayerManager(6);
            ISpectatorManager spectatorManager = factory.CreateSpectatorManager(10);

            //
            IHost wcfHost = new Server.WCFHost.WCFHost(
                playerManager,
                spectatorManager,
                banManager,
                factory)
            {
                Port = ConfigurationManager.AppSettings["port"]
            };

            //
            IActionQueue actionQueue = new BlockingActionQueue();

            //
            IPieceProvider pieceProvider = factory.CreatePieceProvider();

            //
            IServer server = new Server.Server(playerManager, spectatorManager, pieceProvider, actionQueue);

            server.AddHost(wcfHost);

            //
            try
            {
                server.StartServer();

                while (!_cancellationTokenSource.IsCancellationRequested)
                {
                    Thread.Sleep(250);
                }

                server.StopServer();
            }
            catch (Exception ex)
            {
                Log.Default.WriteLine(LogLevels.Error, "Error while running server. Exception {0}", ex);
            }
        }
示例#5
0
        protected HostBase(IPlayerManager playerManager, ISpectatorManager spectatorManager, IBanManager banManager, IFactory factory)
        {
            if (playerManager == null)
            {
                throw new ArgumentNullException(nameof(playerManager));
            }
            if (banManager == null)
            {
                throw new ArgumentNullException(nameof(banManager));
            }
            if (factory == null)
            {
                throw new ArgumentNullException(nameof(factory));
            }

            PlayerManager    = playerManager;
            SpectatorManager = spectatorManager;
            BanManager       = banManager;
            Factory          = factory;
        }
示例#6
0
        static void Main(string[] args)
        {
            Log.Default.Initialize(ConfigurationManager.AppSettings["logpath"], "server.log");

            Version version = Assembly.GetEntryAssembly().GetName().Version;
            string  company = ((AssemblyCompanyAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyCompanyAttribute), false)).Company;
            string  product = ((AssemblyProductAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyProductAttribute), false)).Product;

            Log.Default.WriteLine(LogLevels.Info, "{0} {1}.{2} by {3}", product, version.Major, version.Minor, company);

            //
            IFactory factory = new Factory();

            //
            IBanManager banManager = factory.CreateBanManager();

            //
            IPlayerManager    playerManager    = factory.CreatePlayerManager(6);
            ISpectatorManager spectatorManager = factory.CreateSpectatorManager(10);

            //
            IHost wcfHost = new Server.WCFHost.WCFHost(
                playerManager,
                spectatorManager,
                banManager,
                factory)
            {
                Port = ConfigurationManager.AppSettings["port"]
            };

            //
            IHost builtInHost = new BuiltInHostBase(
                playerManager,
                spectatorManager,
                banManager,
                factory);


            IHost socketHost = new TCPHostBase(playerManager,
                                               spectatorManager,
                                               banManager,
                                               factory)
            {
                Port = 5656
            };

            //
            List <DummyBuiltInClient> clients = new List <DummyBuiltInClient>
            {
                //new DummyBuiltInClient("BuiltIn-Joel" + Guid.NewGuid().ToString().Substring(0, 5), () => builtInHost),
                //new DummyBuiltInClient("BuiltIn-Celine" + Guid.NewGuid().ToString().Substring(0, 5), () => builtInHost)
            };

            //
            IActionQueue actionQueue = factory.CreateActionQueue();

            //
            IPieceProvider pieceProvider = factory.CreatePieceProvider();

            //
            IServer server = new Server.Server(playerManager, spectatorManager, pieceProvider, actionQueue);

            server.AddHost(wcfHost);
            server.AddHost(builtInHost);
            server.AddHost(socketHost);

            //
            try
            {
                server.StartServer();
            }
            catch (Exception ex)
            {
                Log.Default.WriteLine(LogLevels.Error, "Cannot start server. Exception: {0}", ex);
                return;
            }

            DisplayHelp();

            bool stopped = false;

            while (!stopped)
            {
                if (Console.KeyAvailable)
                {
                    ConsoleKeyInfo cki = Console.ReadKey(true);
                    switch (cki.Key)
                    {
                    default:
                        DisplayHelp();
                        break;

                    case ConsoleKey.X:
                        server.StopServer();
                        stopped = true;
                        break;

                    case ConsoleKey.S:
                        server.StartGame();
                        break;

                    case ConsoleKey.T:
                        server.StopGame();
                        break;

                    case ConsoleKey.P:
                        server.PauseGame();
                        break;

                    case ConsoleKey.R:
                        server.ResumeGame();
                        break;

                    case ConsoleKey.Add:
                        clients.Add(new DummyBuiltInClient("BuiltIn-" + Guid.NewGuid().ToString().Substring(0, 5), () => builtInHost));
                        break;

                    case ConsoleKey.Subtract:
                    {
                        DummyBuiltInClient client = clients.LastOrDefault();
                        if (client != null)
                        {
                            client.DisconnectFromServer();
                            clients.Remove(client);
                        }
                        break;
                    }

                    case ConsoleKey.L:
                    {
                        DummyBuiltInClient client = clients.LastOrDefault();
                        client?.Lose();
                        break;
                    }

                    case ConsoleKey.D:
                        Console.WriteLine("Players:");
                        foreach (IPlayer p in playerManager.Players)
                        {
                            Console.WriteLine("{0}) {1} [{2}] {3} {4} {5:HH:mm:ss.fff} {6:HH:mm:ss.fff}", p.Id, p.Name, p.Team, p.State, p.PieceIndex, p.LastActionFromClient, p.LastActionToClient);
                        }
                        Console.WriteLine("Spectators:");
                        foreach (ISpectator s in spectatorManager.Spectators)
                        {
                            Console.WriteLine("{0}) {1} {2:HH:mm:ss.fff} {3:HH:mm:ss.fff}", s.Id, s.Name, s.LastActionFromClient, s.LastActionToClient);
                        }
                        break;

                    case ConsoleKey.W:
                        foreach (WinEntry e in server.WinList)
                        {
                            Console.WriteLine("{0}[{1}]: {2} pts", e.PlayerName, e.Team, e.Score);
                        }
                        break;

                    case ConsoleKey.Q:
                        server.ResetWinList();
                        break;

                    case ConsoleKey.O:
                    {
                        GameOptions options = server.Options;
                        foreach (PieceOccurancy occurancy in options.PieceOccurancies)
                        {
                            Console.WriteLine("{0}:{1}", occurancy.Value, occurancy.Occurancy);
                        }
                        foreach (SpecialOccurancy occurancy in options.SpecialOccurancies)
                        {
                            Console.WriteLine("{0}:{1}", occurancy.Value, occurancy.Occurancy);
                        }
                    }
                    break;

                    case ConsoleKey.I:
                    {
                        foreach (KeyValuePair <string, GameStatisticsByPlayer> byPlayer in server.GameStatistics)
                        {
                            GameStatisticsByPlayer stats = byPlayer.Value;
                            string playerName            = byPlayer.Key;
                            Console.WriteLine("{0}) {1} : 1:{2} 2:{3} 3:{4} 4:{5}", byPlayer.Key, playerName, stats.SingleCount, stats.DoubleCount, stats.TripleCount, stats.TetrisCount);
                            foreach (KeyValuePair <Specials, Dictionary <string, int> > bySpecial in stats.SpecialsUsed)
                            {
                                Console.WriteLine("Special {0}", bySpecial.Key);
                                foreach (KeyValuePair <string, int> kv in bySpecial.Value)
                                {
                                    string otherName = kv.Key;
                                    Console.WriteLine("\t{0}:{1}", otherName, kv.Value);
                                }
                            }
                        }
                        break;
                    }
                    }
                }
                else
                {
                    System.Threading.Thread.Sleep(100);
                    Parallel.ForEach(
                        clients,
                        client => client.Test());
                }
            }
        }
示例#7
0
 public TCPHostBase(IPlayerManager playerManager, ISpectatorManager spectatorManager, IBanManager banManager, IFactory factory)
     : base(playerManager, spectatorManager, banManager, factory)
 {
     _serviceHost = new SocketServiceHost(this);
 }
示例#8
0
 public BuiltInHostBase(IPlayerManager playerManager, ISpectatorManager spectatorManager, IBanManager banManager, IFactory factory)
     : base(playerManager, spectatorManager, banManager, factory)
 {
 }