/// <summary>
        /// Initializes the client after it has successfully joined a game on
        /// a game server.
        /// </summary>
        /// <param name="spawnPosition">
        /// The position on the map where the server has created the <see cref="PlayerEntity"/>
        /// for the player
        /// </param>
        /// <param name="serverStub">
        /// An object that can invoke methods on the game server
        /// </param>
        /// <returns></returns>
        protected async Task InitializeAsync(Point spawnPosition, IGameServerStub serverStub)
        {
            _serverStub = serverStub;
            PlayerPosition = spawnPosition;
            Map = new Map(new RemoteChunkStorage(PlayerInfo.PlayerId, _serverStub));

            // Load chunk at spawn position
            await Map.GetAsync(spawnPosition);
        }
        public async Task DisconnectAsync()
        {
            if (_serverStub == null)
                return;

            await _serverStub.LeaveAsync(PlayerInfo.PlayerId);
            _serverStub = null;
            PlayerPosition = Point.Zero;
            Map = null;
        }
 public RemoteChunkStorage(string playerId, IGameServerStub server)
 {
     _playerId = playerId;
     _server = server;
 }