public async Task ScavengerJoinLobby(ILobbyObserver lobbyObserver, IScavengerObserver scavengerObserver) { var lobbyId = _lobbiesWaitingForScavengers.Any() ? _lobbiesWaitingForScavengers.First() : Guid.NewGuid(); var lobby = GrainFactory.GetGrain <ILobbyGrain>(lobbyId); await lobby.ScavengerJoin(lobbyObserver, scavengerObserver); }
public async Task SetClient(ScavengerClient client) { _client = client; _scavengerObserver = await GrainClient.GrainFactory.CreateObjectReference <IScavengerObserver>(client); _lobbyObserver = await GrainClient.GrainFactory.CreateObjectReference <ILobbyObserver>(client); if (client.ScavengerId.HasValue) { var scavengerGrain = GrainClient.GrainFactory.GetGrain <IScavengerGrain>(client.ScavengerId.Value); await scavengerGrain.SubscribeScavenger(_scavengerObserver); } }
public Task ScavengerJoin(ILobbyObserver lobbyObserver, IScavengerObserver scavengerObserver) { Subscribe(lobbyObserver); _scavengerObserver = scavengerObserver; var scavengerGrain = GrainFactory.GetGrain <IScavengerGrain>(Guid.NewGuid()); _lobby.AddScavenger(scavengerGrain.GetPrimaryKey()); Console.WriteLine($"Scavenger {_lobby.ScavengerId} joined Lobby { this.GetPrimaryKey()}"); if (_lobby.IsWaitingForGuide) { var lobbyManagerGrain = GrainFactory.GetGrain <ILobbyManagerGrain>(0); lobbyManagerGrain.AddLobbyWaitingForGuide(this.GetPrimaryKey()); } return(TaskDone.Done); }
public Task UnsubscribeScavenger(IScavengerObserver observer) { this._scavengerObservers.Unsubscribe(observer); return(TaskDone.Done); }
public Task SubscribeScavenger(IScavengerObserver observer) { _scavengerObservers.Clear(); _scavengerObservers.Subscribe(observer); return(TaskDone.Done); }