public void RegisterActorCoordinatorFor <TPrimaryNetContract>(IActorCoordinator coordinator)
        {
            NetContractDescription desc = Dispatcher.GetContract <TPrimaryNetContract>();

            coordinator.Init(this, desc.TypeId);
            _actorCoordinatorsByPrimaryContractId.Add(desc.TypeId, coordinator);
        }
        public async Task <ActorProxy <TPrimaryNetContract> > GetActor <TPrimaryNetContract>(string actorName)
        {
            IActorCoordinator coordinator = GetCoordinator <TPrimaryNetContract>();

            ActorKey actorKey = await coordinator.GetOrCreate(actorName);

            return(await GetActor <TPrimaryNetContract>(actorKey));
        }
Exemplo n.º 3
0
        public async Task <List <string> > GetRooms()
        {
            Log.Debug("getting rooms");
            IActorCoordinator chatRoomGroupCoordinator = Node.GetCoordinator <IChatRoom>();

            IReadOnlyList <ActorRemoteInfo> actors = await chatRoomGroupCoordinator.GetActors();

            List <string> rooms = actors.Select(x => x.Name).ToList();

            return(rooms);
        }
Exemplo n.º 4
0
        private void OnUserDisconnected(INetPeer peer)
        {
            ChatRoomClient client;

            if (_usersByChannelId.TryGetValue(peer.Channel.Id, out client))
            {
                client.DisconnectionSubscription.Dispose();
                _usersById.Remove(client.Info.Id);
                _usersByChannelId.Remove(client.Peer.Channel.Id);
                string disconnectMsg = client.Info.Name + " has disconnected";
                _messages.Add(disconnectMsg);

                SendToAll(disconnectMsg);
                Log.Info("User<Name:{0}> has disconnected", client.Info.Name);
                if (!_usersByChannelId.Any())
                {
                    IActorCoordinator coordinator = Node.GetCoordinator <IChatRoom>();

                    coordinator.RemoveActor(Name);//kill me pls
                }
            }
        }