/// <summary> /// Handles a meow and signal it to other processes /// </summary> /// <param name="meowRequest"></param> /// <param name="sender"></param> private void HandleMeow(MeowRequest meowRequest, ActorProcess sender) { logger.LogMeow(sender.Rank, sender.Position); Broadcast(new MeowSignal { MeowLocation = sender.Position }); }
/// <summary> /// Handle a request message /// </summary> /// <param name="request"></param> private void HandleRequest(Communication.Request request) { ActorProcess sender = GetActorProcessByRank(request.Rank); // Death confirmation DeathConfirmation deathConfirmation = request as DeathConfirmation; if (deathConfirmation != null) { HandleDeath(deathConfirmation, sender); return; } // Validate that the process is still in the game (playing). // This is meant to deny requests that were sent in between the moment the actor was removed from the game and the moment the actor learned about it. if (!sender.Playing) { return; // Ignore the request, the process is no longer playing } // Move request MoveRequest moveRequest = request as MoveRequest; if (moveRequest != null) { HandleMovePlayer(moveRequest, sender); return; } // Meow request MeowRequest meowRequest = request as MeowRequest; if (meowRequest != null) { HandleMeow(meowRequest, sender); return; } }