コード例 #1
0
 public void OnServerGameCreated(GameData game)
 {
     throw new NotImplementedException();
 }
コード例 #2
0
ファイル: Game.cs プロジェクト: SinaC/TetriNET2
        public bool Join(IClient client, bool asSpectator)
        {
            if (client == null)
                throw new ArgumentNullException("client");
            if (State == GameStates.Created || State == GameStates.Stopping)
            {
                Log.Default.WriteLine(LogLevels.Warning, "Cannot join, game {0} is not started(or stopping)", Name);
                return false;
            }
            if (!asSpectator && PlayerCount >= MaxPlayers)
            {
                Log.Default.WriteLine(LogLevels.Warning, "Too many players in game {0}", Name);
                return false;
            }
            if (asSpectator && SpectatorCount >= MaxSpectators)
            {
                Log.Default.WriteLine(LogLevels.Warning, "Too many spectators in game {0}", Name);
                return false;
            }
            if (Clients.Any(x => x == client))
            {
                Log.Default.WriteLine(LogLevels.Warning, "Client already in game {0}", Name);
                return false;
            }

            IClient previousMaster = Players.FirstOrDefault();

            //
            _clients.Add(client);

            // Change role, state and game
            client.Roles &= ~(ClientRoles.Player | ClientRoles.Spectator); // remove player+spectator
            if (asSpectator)
                client.Roles |= ClientRoles.Spectator;
            else
                client.Roles |= ClientRoles.Player;
            client.State = ClientStates.WaitInGame;
            client.Game = this;
            client.LastVoteKickAnswer = null;

            IClient newMaster = Players.FirstOrDefault();
            if (client.IsPlayer && client == newMaster) // set game master
            {
                // Clear previous game master
                if (previousMaster != null)
                    previousMaster.Roles &= ~ClientRoles.GameMaster;
                // Set game master
                client.Roles |= ClientRoles.GameMaster;
            }

            // Inform client
            GameData gameData = new GameData
                {
                    Id = Id,
                    Name = Name,
                    Rule = Rule,
                    Options = Options,
                    Clients = Clients.Select(x => new ClientData
                        {
                            Id = x.Id,
                            Name = x.Name,
                            GameId = Id,
                            Team = x.Team,
                            IsGameMaster = x.IsGameMaster,
                            IsPlayer = x.IsPlayer,
                            IsSpectator = x.IsSpectator
                        }).ToList()
                };
            client.OnGameJoined(GameJoinResults.Successfull, gameData, client.IsGameMaster);

            // Inform other clients in game
            foreach (IClient target in Clients.Where(c => c != client))
                target.OnClientGameJoined(client.Id, asSpectator);
            // Inform other clients about game master modification
            if (client.IsGameMaster)
            {
                foreach (IClient target in Clients.Where(c => c != client))
                    target.OnGameMasterModified(client.Id);
                Log.Default.WriteLine(LogLevels.Info, "Game {0}: Game master modified: {1}", Name, client.Id);
            }

            Log.Default.WriteLine(LogLevels.Info, "Game {0}: client {1} joined", Name, client.Name);
            return true;
        }
コード例 #3
0
 public void OnClientGameCreated(Guid clientId, GameData game)
 {
     throw new NotImplementedException();
 }
コード例 #4
0
ファイル: Client.cs プロジェクト: SinaC/TetriNET2
        public void OnServerGameCreated(GameData game)
        {
            Log.Default.WriteLine(LogLevels.Info, "Server creates game {0}", game == null ? Guid.Empty : game.Id);

            ResetTimeout();

            _games.Add(game);

            ServerGameCreated.Do(x => x(game));
        }
コード例 #5
0
ファイル: ConsoleUI.cs プロジェクト: SinaC/TetriNET2
        private void OnClientGameCreated(ClientData client, GameData game)
        {
            Console.WriteLine("OnClientGameCreated: {0} {1} {2} {3}", client == null ? Guid.Empty : client.Id, game.Id, game.Name, game.Rule);
            if (game.Clients != null)
            {
                Console.WriteLine("\tClients: {0}", game.Clients.Count);
                foreach (ClientData gameClient in game.Clients)
                    Console.WriteLine("\tClient: {0} {1} {2} {3} {4} {5}", gameClient.Id, gameClient.Name, gameClient.GameId, gameClient.IsGameMaster, gameClient.IsPlayer, gameClient.IsSpectator);
            }

            DisplayGameList();
        }
コード例 #6
0
ファイル: ClientFake.cs プロジェクト: SinaC/TetriNET2
 public void OnClientGameCreated(Guid clientId, GameData game)
 {
     UpdateCallInfo(System.Reflection.MethodBase.GetCurrentMethod().Name, clientId, game);
 }
コード例 #7
0
ファイル: ClientFake.cs プロジェクト: SinaC/TetriNET2
 public void OnGameCreated(GameCreateResults result, GameData game)
 {
     UpdateCallInfo(System.Reflection.MethodBase.GetCurrentMethod().Name, result, game);
 }
コード例 #8
0
ファイル: Client.cs プロジェクト: SinaC/TetriNET2
 public void OnGameCreated(GameCreateResults result, GameData game)
 {
     ExceptionFreeAction(() => Callback.OnGameCreated(result, game));
 }
コード例 #9
0
ファイル: Client.cs プロジェクト: SinaC/TetriNET2
 public void OnGameJoined(GameJoinResults result, GameData game, bool isGameMaster)
 {
     ExceptionFreeAction(() => Callback.OnGameJoined(result, game, isGameMaster));
 }
コード例 #10
0
ファイル: Client.cs プロジェクト: SinaC/TetriNET2
 public void OnClientGameCreated(Guid clientId, GameData game)
 {
     ExceptionFreeAction(() => Callback.OnClientGameCreated(clientId, game));
 }
コード例 #11
0
ファイル: Client.cs プロジェクト: SinaC/TetriNET2
 public void OnServerGameCreated(GameData game)
 {
     ExceptionFreeAction(() => Callback.OnServerGameCreated(game));
 }
コード例 #12
0
ファイル: Client.cs プロジェクト: SinaC/TetriNET2
 public bool JoinGame(GameData game, string password, bool asSpectator)
 {
     if (game == null || _games.All(x => x != game))
         return false;
     _proxy.Do(x => x.ClientJoinGame(game.Id, password, asSpectator));
     return true;
 }
コード例 #13
0
ファイル: Client.cs プロジェクト: SinaC/TetriNET2
        public void OnGameJoined(GameJoinResults result, GameData game, bool isGameMaster)
        {
            Log.Default.WriteLine(LogLevels.Info, "Game jointed {0} {1} {2}", result, game == null ? Guid.Empty : game.Id, isGameMaster);

            ResetTimeout();

            GameData innerGame = game == null ? null : _games.FirstOrDefault(x => x.Id == game.Id);
            if (result == GameJoinResults.Successfull && game != null)
            {
                Log.Default.WriteLine(LogLevels.Info, "Game {0} joined successfully. Master {1}", game.Id, isGameMaster);

                _state = States.WaitInGame;
                _isGameMaster = isGameMaster;

                _gameClients.Clear();
                foreach(ClientData client in game.Clients)
                {
                    ClientData innerClient = _clients.FirstOrDefault(x => x.Id == client.Id);
                    if (innerClient != null)
                        _gameClients.Add(innerClient);
                }
                if (innerGame != null)
                {
                    innerGame.Name = game.Name;
                    innerGame.Options = game.Options;
                    innerGame.Rule = game.Rule;
                }
            }
            else
            {
                Log.Default.WriteLine(LogLevels.Warning, "Failed to join game {0} {1}", game == null ? Guid.Empty : game.Id, result);
            }

            GameJoined.Do(x => x(result, innerGame, isGameMaster));
        }
コード例 #14
0
ファイル: Client.cs プロジェクト: SinaC/TetriNET2
        public void OnGameCreated(GameCreateResults result, GameData game)
        {
            Log.Default.WriteLine(LogLevels.Info, "Game created {0} {1}", result, game == null ? Guid.Empty : game.Id);

            ResetTimeout();

            if (result == GameCreateResults.Successfull)
            {
                Log.Default.WriteLine(LogLevels.Info, "Game {0} created successfully", game == null ? Guid.Empty : game.Id);

                _games.Add(game);
            }
            else
            {
                Log.Default.WriteLine(LogLevels.Warning, "Failed to create game {0}", result);
            }

            GameCreated.Do(x => x(result, game));
        }
コード例 #15
0
 public void OnGameCreated(GameCreateResults result, GameData game)
 {
     throw new NotImplementedException();
 }
コード例 #16
0
ファイル: ConsoleUI.cs プロジェクト: SinaC/TetriNET2
 private void OnGameJoined(GameJoinResults result, GameData game, bool isGameMaster)
 {
     Console.WriteLine("OnGameJoined: {0} {1} {2}", result, game == null ? Guid.Empty : game.Id, isGameMaster);
 }
コード例 #17
0
 public void OnGameJoined(GameJoinResults result, GameData game, bool isGameMaster)
 {
     throw new NotImplementedException();
 }
コード例 #18
0
ファイル: ConsoleUI.cs プロジェクト: SinaC/TetriNET2
 private void OnGameCreated(GameCreateResults result, GameData game)
 {
     Console.WriteLine("OnGameCreated: {0} {1} {2} {3}", result, game.Id, game.Name, game.Rule);
 }
コード例 #19
0
ファイル: ClientFake.cs プロジェクト: SinaC/TetriNET2
 public void OnServerGameCreated(GameData game)
 {
     UpdateCallInfo(System.Reflection.MethodBase.GetCurrentMethod().Name, game);
 }
コード例 #20
0
ファイル: ConsoleUI.cs プロジェクト: SinaC/TetriNET2
        private void OnServerGameDeleted(GameData game)
        {
            Console.WriteLine("OnGameDeleted: {0}", game == null ? Guid.Empty : game.Id);

            DisplayGameList();
        }
コード例 #21
0
ファイル: ClientFake.cs プロジェクト: SinaC/TetriNET2
 public void OnGameJoined(GameJoinResults result, GameData game, bool isGameMaster)
 {
     UpdateCallInfo(System.Reflection.MethodBase.GetCurrentMethod().Name, result, game, isGameMaster);
 }
コード例 #22
0
ファイル: Client.cs プロジェクト: SinaC/TetriNET2
        public void OnClientGameCreated(Guid clientId, GameData game)
        {
            Log.Default.WriteLine(LogLevels.Info, "Client {0} creates game {1}", clientId, game == null ? Guid.Empty : game.Id);

            ResetTimeout();

            _games.Add(game);
            
            ClientData client = _clients.FirstOrDefault(x => x.Id == clientId);
            ClientGameCreated.Do(x => x(client, game));
        }