Exemple #1
0
        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");
            }
        }
Exemple #2
0
        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");
            }
        }