Exemple #1
0
        public ClientSession(ISocketTask socket, Guid sessionID, IClusterClient clusterClient)
        {
            m_Socket  = socket;
            SessionID = sessionID;

            socket.MessageEncoder = new MessageEncoder();
            socket.MessageDecoder = new MessageDecoder();


            m_Socket.OnDisconnect += OnDisconnect;
            m_Socket.OnMessage    += OnMessage;


            try
            {
                m_ClientSessionGrain = clusterClient.GetGrain <IPlayerGrain>(sessionID);

                var obj = clusterClient.CreateObjectReference <IGatewayGrainObserver>(this).GetAwaiter().GetResult();
                m_ClientSessionGrain.Subscribe(obj).Wait();
            }
            catch (Exception e)
            {
                Logger.Warn(e);
            }

            socket.Startup();
        }
        async Task IPlayerRegistrationGrain.Register(IPlayerObserver playerObserver)
        {
            var playerId = this.GetPrimaryKey();

            // first have someone else to wait for future notifications from the GameServerGrain
            IPlayerGrain playerInGame = PlayerGrainFactory.GetGrain(playerId);

            // Forward subscription to the corresponding PlayerInGameGrain and trigger lobby service.
            var playerInfo = await playerInGame.Subscribe(playerObserver);

            // *then* ask to start a GameServerGrain via lobby
            await _lobby.RegisterPlayer(playerInGame, playerInfo);
        }