示例#1
0
        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;
            }
            }
        }
示例#2
0
        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);
        }