protected override async Task HandleMessage(IClientAction action) { ChannelAnt channel = null; Message message = null; switch (action) { case ClientJoinAction a: { channel = _anthill.GetAnt <ChannelAnt>(a.ChannelName); message = await channel.Join(_userName); a.ReplyChanel.Reply(message); ActiveChannel = a.ChannelName; break; } case ClientLeaveAction a: { channel = _anthill.GetAnt <ChannelAnt>(ActiveChannel); message = await channel.Leave(_userName); ActiveChannel = ""; a.ReplyChanel.Reply(message); break; } case ClientSetUsernameAction a: { _userName = a.Username; break; } case ClientSendMessageAction a: { channel = _anthill.GetAnt <ChannelAnt>(ActiveChannel); message = await channel.Send(new Message(_userName, a.Message)); a.ReplyChanel.Reply(message); break; } } }
public override async Task OnDisconnectedAsync(Exception exception) { var client = _anthill.GetAnt <ClientAnt>(Context.GetAccessToken()); var activeChannel = client.ActiveChannel; var message = await client.LeaveChannel(); await SendMessageNotification(activeChannel, message); var clientChannelMapping = _anthill.GetAnt <ClientChannelMappingAnt>(Constants.ClientChannelMappingAntId); clientChannelMapping.RemoveMapping(Context.ConnectionId, activeChannel); await base.OnDisconnectedAsync(exception); }