示例#1
0
        public async Task SubscribeToChunk(ChunkKey key)
        {
            if (Subscriptions.ContainsKey(key))
            {
                return;
            }

            var channel = OutgoingChannel;//copy to local for closure;
            var chunkHandlerSubscription = await BattleHandler.GetChunkHandlerAndSubscribeAsync(key, (chunkKey, update) => OnChunkUpdateAsync(key, update, channel));

            if (Subscriptions.TryAdd(key, chunkHandlerSubscription))
            {
                await SendChunkStateAsync(key, chunkHandlerSubscription);
            }
            else
            {
                chunkHandlerSubscription.Dispose();
                throw new InvalidOperationException("Duplicate subscription is detected.");
            }
        }