public async Task <bool> ReservePlayerColour(Guid sessionId, String sessionEtag, PlayerColour colour) { await StorageDelaySimulationTask; if (SessionMap.ContainsKey(sessionId)) { DummySession session = SessionMap[sessionId]; if (session.CurrentEtag == sessionEtag) { var colourQuery = from player in session.Players where player.Colour == colour select player; if (colourQuery.Count() == 0) { session.GenerateNewEtag(); return(true); } else { // Already taken return(false); } } else { // Doesn't match! throw new ConcurrencyException(); } } else { throw new InvalidOperationException("Shouldn't call ReservePlayerColour with an invalid session GUID"); } }
public Task JoinSession(Guid sessionId, String userId, PlayerColour colour) { DummySession foundSession = SessionMap[sessionId]; if (foundSession != null) { foundSession.Players.Add(new DummyNationData(userId) { Colour = colour }); foundSession.GenerateNewEtag(); return(Task.FromResult(false)); } else { throw new InvalidOperationException("Called JoinSession with a non-existant GUID"); } }