コード例 #1
0
        public void HandleOnPlayer(Messages.PlayerInterfaces.IConnection connection)
        {
            var msg        = connection.Logic.AnswerForGameMessage(connection, this);
            var serializer = new Messages.XmlHandling.Serializer(msg);

            connection.SendMessage(serializer.Serialize());
        }
コード例 #2
0
ファイル: PickUpPiece.cs プロジェクト: m-s-z/SE2
        public void HandleOnGameMaster(Messages.GameMaster.IConnection connection)
        {
            var msg = new Data();

            IPlayer player = connection.GameState.BluePlayers.FirstOrDefault(p => p.Guid.ToString() == this.playerGuid);

            if (player == null)
            {
                player = connection.GameState.RedPlayers.FirstOrDefault(p => p.Guid.ToString() == this.playerGuid);
            }
            msg.playerId = player.Id;
            Piece[] pickedUpPiece = new Piece[1];
            foreach (PieceInfo p in connection.GameState.Pieces)
            {
                if (player.Location.x == p.Location.x && player.Location.y == p.Location.y)
                {
                    p.Piece.playerId          = player.Id;
                    p.Piece.playerIdSpecified = true;
                    pickedUpPiece[0]          = new Piece()
                    {
                        type = PieceType.unknown, playerId = player.Id, playerIdSpecified = true, id = p.Piece.id
                    };
                    msg.Pieces = pickedUpPiece;
                    connection.GameState.CalculateManhattanDistance();
                }
            }
            msg.gameFinished = connection.GameState.GameFinished;
            var serializer = new Messages.XmlHandling.Serializer(msg);

            connection.DelayMessage(serializer, connection.GameState.ActionCosts.PickUpDelay);
        }
コード例 #3
0
ファイル: Data.cs プロジェクト: m-s-z/SE2
        public void HandleOnCommunicationServer(Messages.CommunicationServer.IConnection connection, Messages.CommunicationServer.IReceiver receiver = null)
        {
            IReceiver rec        = connection.Receivers.Find(p => p.Id == this.playerId);
            var       serializer = new Messages.XmlHandling.Serializer(this);

            rec.SendMessage(serializer.Serialize());
        }
コード例 #4
0
ファイル: TestPiece.cs プロジェクト: m-s-z/SE2
        public void HandleOnGameMaster(Messages.GameMaster.IConnection connection)
        {
            var     msg    = new Data();
            IPlayer player = connection.GameState.BluePlayers.FirstOrDefault(p => p.Guid.ToString() == this.playerGuid);

            if (player == null)
            {
                player = connection.GameState.RedPlayers.FirstOrDefault(p => p.Guid.ToString() == this.playerGuid);
            }
            msg.playerId = player.Id;
            Piece[] checkedPiece = new Piece[1];

            foreach (PieceInfo p in connection.GameState.Pieces)
            {
                if (player.Id == p.Piece.playerId)
                {
                    checkedPiece[0] = new Piece()
                    {
                        type = p.Piece.type, playerId = player.Id, playerIdSpecified = true, id = p.Piece.id
                    };
                    msg.Pieces = checkedPiece;
                }
            }
            msg.gameFinished = connection.GameState.GameFinished;

            var serializer = new Messages.XmlHandling.Serializer(msg);

            connection.DelayMessage(serializer, connection.GameState.ActionCosts.TestDelay);
        }
コード例 #5
0
        public void HandleOnGameMaster(Messages.GameMaster.IConnection connection)
        {
            var guid      = Guid.NewGuid();
            var gameState = connection.GameState;
            var msg       = new ConfirmJoiningGame(gameState.GameId, guid, this.playerId, new Player(this.playerId, this.preferredTeam, this.preferredRole));

            connection.AddPlayer(guid, msg.playerId, this.preferredTeam, this.preferredRole);

            var serializer = new Messages.XmlHandling.Serializer(msg);

            connection.SendMessage(serializer.Serialize());
            if (((ulong)gameState.RedPlayers.Count == gameState.RedTeamMax)
                &&
                ((ulong)gameState.BluePlayers.Count == gameState.BlueTeamMax))
            {
                gameState.GameStarted = true;
                var gameMsg = new Game();
                gameMsg.Players = new Player[gameState.RedTeamMax + gameState.BlueTeamMax];
                int index = 0;
                for (int i = 0; i < (int)gameState.RedTeamMax; i++, index++)
                {
                    var p = gameState.RedPlayers[i];
                    gameMsg.Players[index] = new Player(p.Id, p.TeamColour, p.PlayerType);
                }
                for (int i = 0; i < (int)gameState.BlueTeamMax; i++, index++)
                {
                    var p = gameState.BluePlayers[i];
                    gameMsg.Players[index] = new Player(p.Id, p.TeamColour, p.PlayerType);
                }
                connection.GameState.SetPlayerLocations();
                Console.WriteLine("Sending game msg");
                gameMsg.Board             = new GameBoard();
                gameMsg.Board.goalsHeight = (uint)connection.GameState.GoalAreaLength;
                gameMsg.Board.tasksHeight = (uint)connection.GameState.TaskAreaLength;
                gameMsg.Board.width       = (uint)connection.GameState.BoardWidth;

                foreach (var player in connection.GameState.RedPlayers)
                {
                    gameMsg.playerId       = player.Id;
                    gameMsg.PlayerLocation = player.Location;
                    serializer             = new Serializer(gameMsg);
                    connection.SendMessage(serializer.Serialize());
                }
                foreach (var player in connection.GameState.BluePlayers)
                {
                    gameMsg.playerId       = player.Id;
                    gameMsg.PlayerLocation = player.Location;
                    serializer             = new Serializer(gameMsg);
                    connection.SendMessage(serializer.Serialize());
                }
                var gameStartedMsg = new GameStarted(connection.GameState.GameId);
                serializer = new Serializer(gameStartedMsg);
                connection.SendMessage(serializer.Serialize());

                connection.GameState.StartSpawningPieces();
            }
        }
コード例 #6
0
ファイル: PickUpPiece.cs プロジェクト: m-s-z/SE2
        public void HandleOnCommunicationServer(Messages.CommunicationServer.IConnection server, IReceiver receiver)
        {
            var   serializer = new Messages.XmlHandling.Serializer(this);
            ulong gameId     = receiver.GameId;
            var   game       = server.Games[gameId];

            this.gameId = gameId;
            game.GameMaster.SendMessage(serializer.Serialize());
        }
コード例 #7
0
        public void HandleOnCommunicationServer(Messages.CommunicationServer.IConnection server, IReceiver receiver)
        {
            var serializer             = new Messages.XmlHandling.Serializer(this);
            List <IReceiver> receivers = new List <IReceiver>();

            foreach (Player p in this.Players)
            {
                receivers.Add(server.Receivers.Find(r => r.Id == p.id));
            }
            var    rec = server.Receivers.Find(r => r.Id == this.playerId);
            string msg = serializer.Serialize();

            rec.SendMessage(msg);
        }
コード例 #8
0
ファイル: ConfirmJoiningGame.cs プロジェクト: m-s-z/SE2
        public void HandleOnCommunicationServer(Messages.CommunicationServer.IConnection server, IReceiver receiver)
        {
            var player = server.Receivers.Find(p => p.Id == this.playerId);

            if (player == null)
            {
                return;
            }
            player.GameId = receiver.GameId;
            var serializer = new Messages.XmlHandling.Serializer(this);

            player.SendMessage(serializer.Serialize());
            server.Games[receiver.GameId].Players.Add(player);
        }
コード例 #9
0
ファイル: Discover.cs プロジェクト: m-s-z/SE2
        public void HandleOnGameMaster(Messages.GameMaster.IConnection connection)
        {
            var     msg    = new Data();
            IPlayer player = connection.GameState.BluePlayers.FirstOrDefault(p => p.Guid.ToString() == this.playerGuid);

            if (player == null)
            {
                player = connection.GameState.RedPlayers.FirstOrDefault(p => p.Guid.ToString() == this.playerGuid);
            }
            msg.TaskFields   = GetSurroundingFields(connection, player);
            msg.playerId     = player.Id;
            msg.gameFinished = connection.GameState.GameFinished;
            var serializer = new Messages.XmlHandling.Serializer(msg);

            connection.DelayMessage(serializer, connection.GameState.ActionCosts.DiscoverDelay);
        }
コード例 #10
0
        public void HandleOnPlayer(Messages.PlayerInterfaces.IConnection connection)
        {
            if (gameFinished == true)
            {
                Console.WriteLine("Game is finished");
                return;
            }
            connection.Logic.SetReceivedData(this.TaskFields, this.GoalFields, this.gameFinished, this.Pieces, this.PlayerLocation);
            var msg = connection.Logic.ChooseNextMessage(connection, this);

            if (msg != null)
            {
                var serializer = new Messages.XmlHandling.Serializer(msg);
                connection.SendMessage(serializer.Serialize());
            }
        }
コード例 #11
0
        public void HandleOnCommunicationServer(Messages.CommunicationServer.IConnection server, Messages.CommunicationServer.IReceiver receiver)
        {
            var game = server.CreateGame(receiver, this);

            if (game == null)
            {
                var msg        = new RejectGameRegistration();
                var serializer = new Messages.XmlHandling.Serializer(msg);
                receiver.SendMessage(serializer.Serialize());
            }
            else
            {
                var msg        = new ConfirmGameRegistration(game.GameId);
                var serializer = new Messages.XmlHandling.Serializer(msg);
                receiver.SendMessage(serializer.Serialize());
            }
        }
コード例 #12
0
        public void HandleOnCommunicationServer(IConnection server, IReceiver receiver)
        {
            var msg   = new RegisteredGames();
            var count = (int)server.GameCount;

            msg.GameInfo = new GameInfo[count];
            int i = 0;

            foreach (var pair in server.Games)
            {
                msg.GameInfo[i] = new GameInfo(pair.Value);
                i++;
            }
            var serializer = new Messages.XmlHandling.Serializer(msg);

            receiver.SendMessage(serializer.Serialize());
        }
コード例 #13
0
        public void HandleOnPlayer(IConnection connection)
        {
            var gameInfo = this.GameInfo;

            //XmlSerializer xmlSerializer = null;
            Messages.CommunicationServer.ICommunicationServerHandler msg = null;
            if (gameInfo != null)
            {
                msg = new JoinGame(connection.GameName, connection.Team, connection.Role);
            }
            else
            {
                msg = new GetGames();
            }
            var serializer = new Messages.XmlHandling.Serializer(msg);

            connection.SendMessage(serializer.Serialize());
        }
コード例 #14
0
ファイル: JoinGame.cs プロジェクト: m-s-z/SE2
        public void HandleOnCommunicationServer(Messages.CommunicationServer.IConnection server, IReceiver receiver)
        {
            lock (server.PlayerCountLock)
            {
                server.PlayerCount++;
                receiver.Id = server.PlayerCount;
            }
            this.playerId          = receiver.Id;
            this.playerIdSpecified = true;
            var gameList = server.Games.Where(g => g.Value.GameName == this.gameName).ToList();

            if (gameList.Count == 1)
            {
                var game       = gameList[0].Value;
                var serializer = new Messages.XmlHandling.Serializer(this);
                game.GameMaster.SendMessage(serializer.Serialize());
            }
            //else send reject message when defined in specification
        }
コード例 #15
0
ファイル: GameMasterDisconnected.cs プロジェクト: m-s-z/SE2
        // Handling is not done
        public void HandleOnCommunicationServer(Messages.CommunicationServer.IConnection server, IReceiver receiver)
        {
            var    serializer = new Messages.XmlHandling.Serializer(this);
            string msg        = serializer.Serialize();

            try
            {
                ulong gameId = receiver.GameId;
                var   game   = server.Games[gameId];

                foreach (var rec in game.Players)
                {
                    rec.SendMessage(msg);
                }
                server.Receivers.Remove(receiver);
                server.Games.Remove(gameId);
            }catch (Exception)
            {
                Console.WriteLine("Error while notifying other clients, gm disconnected");
            }
        }
コード例 #16
0
ファイル: PlayerDisconnected.cs プロジェクト: m-s-z/SE2
        public void HandleOnCommunicationServer(Messages.CommunicationServer.IConnection server, IReceiver receiver)
        {
            //gameid == 0 -> player is not assigned to any game
            if (receiver.GameId == 0)
            {
                server.Receivers.Remove(receiver);
                return;
            }
            var    serializer = new Messages.XmlHandling.Serializer(this);
            string msg        = serializer.Serialize();
            ulong  gameId     = receiver.GameId;
            var    game       = server.Games[gameId];

            game.Players.Remove(receiver);
            server.Receivers.Remove(receiver);
            try
            {
                foreach (var player in game.Players)
                {
                    if (player.Status == true)
                    {
                        player.SendMessage(msg);
                    }
                }
                game.GameMaster.SendMessage(msg);
                if (game.Players.Count == 0)
                {
                    server.Games.Remove(game.GameId);
                }
            }
            catch (Exception)
            {
                Console.WriteLine("Error while notifying other clients");
            }
            Console.WriteLine("Games: {0}", game.Players.Count);
        }
コード例 #17
0
ファイル: Connection.cs プロジェクト: m-s-z/SE2
 public void DelayMessage(Messages.XmlHandling.Serializer serializer, uint delay)
 {
     _delay.DelayMessage(this, serializer, delay);
 }
コード例 #18
0
ファイル: PlacePiece.cs プロジェクト: m-s-z/SE2
        public void HandleOnGameMaster(Messages.GameMaster.IConnection connection)
        {
            var msg = new Data();

            IPlayer player = connection.GameState.BluePlayers.FirstOrDefault(p => p.Guid.ToString() == this.playerGuid);

            if (player == null)
            {
                player = connection.GameState.RedPlayers.FirstOrDefault(p => p.Guid.ToString() == this.playerGuid);
            }
            msg.playerId = player.Id;

            Piece[]     placedPiece = new Piece[1];
            GoalField[] goalFields  = new GoalField[1];
            //we pick piece which shares the location with player.
            PieceInfo myPiece = connection.GameState.Pieces.First(p => p.Location.x == player.Location.x &&
                                                                  p.Location.y == player.Location.y &&
                                                                  p.Piece.playerId == player.Id &&
                                                                  p.Piece.playerIdSpecified == true);

            if (myPiece.Piece.type != PieceType.sham)
            {
                //if piece is on place we are standing,
                foreach (PieceInfo p in connection.GameState.Pieces)
                {
                    if (player.Location.x == p.Location.x && player.Location.y == p.Location.y)
                    {
                        if (player.Id != p.Piece.playerId)
                        {
                            placedPiece[0] = new Piece()
                            {
                                type = myPiece.Piece.type, playerId = player.Id, playerIdSpecified = true, id = myPiece.Piece.id
                            };
                        }
                    }
                }
                // this is overriding the lines before, we need to think through this process.
                placedPiece[0] = new Piece()
                {
                    type = myPiece.Piece.type, id = myPiece.Piece.id
                };

                foreach (List <Xsd2.Field> flist in connection.GameState.BoardList)
                {
                    foreach (var f in flist)
                    {
                        if (f is GoalField)
                        {
                            if (f.x == player.Location.x && f.y == player.Location.y)
                            {
                                goalFields[0] = new GoalField()
                                {
                                    playerId = player.Id, type = ((GoalField)f).type, playerIdSpecified = true, x = f.x, y = f.y
                                };
                                Console.WriteLine(((GoalField)f).type);
                                Console.WriteLine("f.x: " + f.x + ", f.y: " + f.y);
                                Console.WriteLine(" x " + player.Location.x + " y " + player.Location.y);
                                //testing whether piece is not sham.
                                if (((GoalField)f).type == GoalFieldType.goal && myPiece.Piece.type == PieceType.normal)
                                {
                                    if (player.TeamColour == TeamColour.red)
                                    {
                                        connection.GameState.RedGoalsFinished++;
                                    }
                                    else
                                    {
                                        connection.GameState.BlueGoalsFinished++;
                                    }
                                }
                            }
                        }
                    }
                }
                // why do we send here piece?
                msg.Pieces     = placedPiece; // we are still or not holding it.
                msg.GoalFields = goalFields;
                if (connection.GameState.GameFinished != true)
                {
                    connection.GameState.GameFinished = CheckIfEnding(connection);
                }
                //edit
                msg.gameFinished = connection.GameState.GameFinished;
                var serializer = new Messages.XmlHandling.Serializer(msg);
                connection.DelayMessage(serializer, connection.GameState.ActionCosts.PlacingDelay);
            }
            else
            {
                connection.GameState.Pieces.First(p => p.Location.x == player.Location.x &&
                                                  p.Location.y == player.Location.y &&
                                                  p.Piece.playerId == player.Id &&
                                                  p.Piece.playerIdSpecified == true).Piece.playerIdSpecified = false;
                //we are sending the keep alive back
                var serializer = new Messages.XmlHandling.Serializer(char.ToString((char)23));
            }
        }