Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="messageToSend"></param>
        /// <returns></returns>
        public async Task SendMessage(MMessageModel messageToSend)
        {
            var sentObject = SetBytesFromMessage(messageToSend);

            await _socket.SendAsync(new ArraySegment <byte>(sentObject, 0, sentObject.Length), 0,
                                    true, CancellationToken.None);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Méthode qui prend construit les arguments de notification
        /// </summary>
        /// <param name="mt"></param>
        /// <param name="e"></param>
        /// <returns></returns>
        private NotificationEventArgs BuildNotificationEventArgs(MessageTypes mt, EventArgs e)
        {
            MMessageModel         message = new MMessageModel(mt, e);
            NotificationEventArgs args    = new NotificationEventArgs()
            {
                Message = message
            };

            return(args);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Process l'enregistrement des blocks de fichier à sauvegarder
        /// </summary>
        /// <param name="gameData"></param>
        /// <returns></returns>
        private MMessageModel ProcessFileSavePartial(string gameData)
        {
            MMessageModel returnedResult = null;

            try
            {
                _partialMessage.Add(JsonConvert.DeserializeObject <GameDescriptor>(gameData));
            }
            catch (Exception ex)
            {
                returnedResult = new MMessageModel(MessageTypes.FILESAVE_ERROR_CORRUPTED, $"{{\"status\" : \"error : {ex.Message}\"}}");
            }
            return(returnedResult);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Process la demande connexion au serveur
        /// </summary>
        /// <returns></returns>
        private MMessageModel ProcessConnectionRequest()
        {
            MMessageModel returnedResult = null;

            try
            {
                returnedResult = new MMessageModel(MessageTypes.GAMECONNECT_OK, "{\"status\" : \"ok\"}");
            }
            catch (Exception ex)
            {
                returnedResult = new MMessageModel(MessageTypes.GAMECONNECT_ERROR, $"{{\"status\" : \"error : {ex.Message}\"}}");
            }
            return(returnedResult);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Initialise la demande requête de collecte de ressources
        /// </summary>
        /// <param name="messageContent"></param>
        /// <returns></returns>
        private MMessageModel ProcessFetchRequested(string messageContent)
        {
            MMessageModel returnedResult = null;

            try
            {
                MUnitCollectRequestedModel data = JsonConvert.DeserializeObject <MUnitCollectRequestedModel>(messageContent);
                _gameManager.FetchResource(data.unitId, data.buildingId);
                returnedResult = new MMessageModel(MessageTypes.FETCHWAY_ACCEPTED, "{\"status\" : \"ok\"}");
            }
            catch (Exception ex)
            {
                returnedResult = new MMessageModel(MessageTypes.FETCHWAY_ABORTED, $"{{\"status\" : \"error : {ex.Message}\"}}");
            }
            return(returnedResult);
        }
Exemplo n.º 6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="buffer"></param>
        /// <returns></returns>
        private MMessageModel GetMessageFromBytes(byte[] buffer)
        {
            MMessageModel messageObject = null;

            var jsonReceived = Encoding.UTF8.GetString(buffer);

            try
            {
                messageObject = JsonConvert.DeserializeObject <MMessageModel>(jsonReceived);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(messageObject);
        }
Exemplo n.º 7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="buffer"></param>
        private void InterpretMessage(byte[] buffer)
        {
            MMessageModel messageReceived = null;

            try
            {
                messageReceived = GetMessageFromBytes(buffer);
                var messageBack = _networkGameDispatcher.ProcessMessage(messageReceived);
                if (messageBack != null)
                {
                    SendMessage(messageBack);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// Méthode d'enregistrement en "continu"
        /// des coordonnées des unités
        /// </summary>
        /// <param name="messageContent"></param>
        /// <returns></returns>
        private MMessageModel ProcessSaveUnitState(string messageContent)
        {
            MMessageModel returnedResult = null;

            try
            {
                List <MUnitsStateModel> data = JsonConvert.DeserializeObject <List <MUnitsStateModel> >(messageContent);
                foreach (var unit in data)
                {
                    _gameManager.SetUnitPosition(unit.Id, unit.Position);
                }
                gameFileManager.SaveGame(_gameManager.ToGameDescriptor(), _gameName);
            }
            catch (Exception ex)
            {
                returnedResult = new MMessageModel(MessageTypes.FILESAVE_ERROR_CORRUPTED, $"{{\"status\" : \"error : {ex.Message}\"}}");
            }
            return(returnedResult);
        }
Exemplo n.º 9
0
        /// <summary>
        /// Process l'initialisation d'un nouveau GameDescriptor,
        /// et l'enregistrement du fichier
        /// </summary>
        /// <param name="dynamic"></param>
        /// <returns></returns>
        private MMessageModel ProcessFileSaveLastPart()
        {
            MMessageModel returnedResult = null;

            try
            {
                IGameDescriptor gameDescriptor = InitializeEachGameItem(_partialMessage, _gameDescriptor);
                gameFileManager.SaveGame(gameDescriptor, _gameName);
                // La partie est correctement initialisée
                _gameManager = new GameManager(_gameDescriptor);
                AttachNotificationsToGameManager();
            }
            catch (Exception ex)
            {
                returnedResult = new MMessageModel(MessageTypes.FILESAVE_ERROR_CORRUPTED, $"{{\"status\" : \"error : {ex.Message}\"}}");
            }
            finally
            {
                _partialMessage.Clear();
            }
            return(returnedResult);
        }
Exemplo n.º 10
0
        /// <summary>
        /// Process la création d'un worker
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        private MMessageModel ProcessCreationWorkerRequest(string message)
        {
            MMessageModel returnedResult = null;

            try
            {
                var data = JsonConvert.DeserializeObject <MCreationRequestBodyModel>(Convert.ToString(message));
                _gameManager.CreateWorker(data.creatorId, data.positionX, data.positionY);
                returnedResult = new MMessageModel(MessageTypes.CREATION_ACCEPTED, $"{{\"status\" : \"ok\"}}");
            }
            catch (NotEnoughUnitSlotsAvailableException slex)
            {
                returnedResult = new MMessageModel(MessageTypes.CREATION_REFUSEDPOPULATION, $"{{\"status\" : \"refused : {slex.Message}\"}}");
            }
            catch (NotEnoughResourcesException rex)
            {
                returnedResult = new MMessageModel(MessageTypes.CREATION_REFUSEDRESOURCES, $"{{\"status\" : \"refused : {rex.Message}\"}}");
            }
            catch (Exception ex)
            {
                returnedResult = new MMessageModel(MessageTypes.CREATION_ERROR, $"{{\"status\" : \"error : ProcessCreationWorkerRequest: message of creation received is incorrectly formatted ({ex.Message})\"}}");
            }
            return(returnedResult);
        }
Exemplo n.º 11
0
        /// <summary>
        /// Process la demande de chargement de fichier
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        private MMessageModel ProcessFileLoadRequest(dynamic fileName)
        {
            MMessageModel returnedResult = null;

            try
            {
                _gameName       = fileName.ToString();
                _gameDescriptor = (GameDescriptor)gameFileManager.ReadGame(_gameName);
                var gameData = JsonConvert.SerializeObject(_gameDescriptor);
                returnedResult = new MMessageModel(MessageTypes.FILELOAD_ACCEPTED, gameData);
            }
            catch (Exception ex)
            {
                if (ex is FileNotFoundException || ex is ArgumentNullException)
                {
                    returnedResult = new MMessageModel(MessageTypes.FILELOAD_ERROR_NOTFOUND, $"{{\"status\" : \"error : {ex.Message}\"}}");
                }
                else
                {
                    returnedResult = new MMessageModel(MessageTypes.FILELOAD_ERROR_CORRUPTED, $"{{\"status\" : \"error : {ex.Message}\"}}");
                }
            }
            return(returnedResult);
        }
Exemplo n.º 12
0
        private byte[] SetBytesFromMessage(MMessageModel message)
        {
            var jsonMessage = JsonConvert.SerializeObject(message);

            return(Encoding.ASCII.GetBytes(jsonMessage));
        }
Exemplo n.º 13
0
        //public event EventHandler<ResourcesChangedArgs> ResourcesChanged;
        //public event EventHandler<MaxPopulationChangedArgs> MaxPopulationChanged;
        ////TODO: créer la classe des args et changer son nom
        //public event EventHandler<MaxPopulationChangedArgs> MaxPopulationReached;
        //public event EventHandler<BuildingCreatedEventArgs> BuildingCreated;
        //public event EventHandler<ResourcesFetchedArgs> BuildingResourcesChanged;
        //// Evenement déclenché lors de la fin de la collecte de ressources par un worker
        //public event EventHandler<ResourcesFetchedArgs> WorkerCompletedCollect;

        //// Evenement déclenché lors de libération des ressources au stock (retour à la base)
        //public event EventHandler<ResourcesReleasedArgs> WorkerCompletedBringback;
        #endregion


        /// <summary>
        /// Interprète un message reçu : point d'entrée de la classe
        /// </summary>
        /// <param name="message"></param>
        public MMessageModel ProcessMessage(MMessageModel messageReceived)
        {
            MMessageModel messageReturned = null;

            string messageContent = Convert.ToString(messageReceived.Message);

            switch (messageReceived.Type)
            {
            // CONNECTION
            case MessageTypes.GAMECONNECT_DEMAND:
                messageReturned = ProcessConnectionRequest();
                break;

            // FILELOAD
            case MessageTypes.FILELOAD_REQUESTED:
                messageReturned = ProcessFileLoadRequest(messageContent);
                break;

            // FILE SAVE - FIRST PART
            case MessageTypes.FILESAVE_REQUESTED_FIRSTPART:
                messageReturned = ProcessFileSavePartial(messageContent);
                break;

            // FILE SAVE - NEXT PARTS
            case MessageTypes.FILESAVE_REQUESTED_NEXTPART:
                messageReturned = ProcessFileSavePartial(messageContent);
                break;

            // FILE SAVE - LAST PART
            case MessageTypes.FILESAVE_REQUESTED_END:
                messageReturned = ProcessFileSaveLastPart();
                break;

            // CREATION REQUEST - WORKER
            case MessageTypes.CREATION_REQUESTED:
                if (!_gameManager.IsGameManagerCorrectlyInitialized)
                {
                    break;
                }
                messageReturned = ProcessCreationWorkerRequest(messageContent);
                break;

            // SAVE DATA UNITSSTATE
            case MessageTypes.CLIENTDATA_UNITSSTATE:
                if (!_gameManager.IsGameManagerCorrectlyInitialized)
                {
                    break;
                }
                messageReturned = ProcessSaveUnitState(messageContent);
                break;

            // COLLECT RESOURCES REQUESTED
            case MessageTypes.FETCHWAY_REQUESTED:
                if (!_gameManager.IsGameManagerCorrectlyInitialized)
                {
                    break;
                }
                messageReturned = ProcessFetchRequested(messageContent);
                break;

            // RELEASE RESOURCES REQUESTED
            case MessageTypes.FETCHBACK_REQUESTED:
                if (!_gameManager.IsGameManagerCorrectlyInitialized)
                {
                    break;
                }
                messageReturned = ProcessReleaseResourcesRequested(messageContent);
                break;

            // DEFAULT
            default:
                messageReturned = new MMessageModel(MessageTypes.INFO, "{\"status\" : \"error : unknown message type\"}");
                break;
            }
            return(messageReturned);
        }