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)); }
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); }
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 } } }