示例#1
0
        private void GetUserKeyValue(ChatChannelUser user)
        {
            //we do not have key value so we do not construct getckey response
            if (user.UserKeyValue.Count == 0)
            {
                return;
            }

            string flags = "";

            foreach (var k in _cmd.Keys)
            {
                if (user.UserKeyValue.ContainsKey(k))
                {
                    flags += @"\" + k + @"\" + user.UserKeyValue[k];
                }
            }

            flags += "\0";

            _sendingBuffer +=
                ChatCommandBase.BuildNormalRPL(ChatServer.ServerDomain,
                                               ChatResponseType.GetCKey,
                                               $"* {_channel.Property.ChannelName} {user.UserInfo.NickName} {_cmd.Cookie} {flags}", "");
        }
示例#2
0
        public async Task <JoinChannelResultModel> JoinToGroupChannel(JoinChannelRequestModel model)
        {
            var user = await _authService.GetAuthorizedUser();

            var channel = await DbContext.ChatChannels.FindAsync(model.ChannelId);

            if (channel == null)
            {
                channel = new ChatChannel();

                await DbContext.AddAsync(channel);

                await DbContext.SaveChangesAsync();
            }

            var channelUser = new ChatChannelUser
            {
                UserId    = user.Id,
                ChannelId = channel.Id
            };

            await DbContext.AddAsync(channelUser);

            await DbContext.SaveChangesAsync();

            await _chatProvider.UserJoinedToChannel(user, channel.Id);

            return(new JoinChannelResultModel {
                ChannelId = channel.Id
            });
        }
示例#3
0
        public void MultiCastLeave(ChatChannelUser leaver, string message)
        {
            string leaveMessage =
                PARTReply.BuildPartReply(
                    leaver, Property.ChannelName, message);

            MultiCast(leaveMessage);
        }
        private void GetUserBFlagsOnly(ChatChannelUser user)
        {
            string flags = user.GetBFlagsString();

            _sendingBuffer += GETCKEYReply.BuildGetCKeyReply(
                    user.UserInfo.NickName, _channel.Property.ChannelName,
                    _request.Cookie, flags);
        }
示例#5
0
        private async void CheckChannel()
        {
            if (mainChannel != null)
            {
                ChatChannelUser channelUser = mainChannel.ChatChannelUsers.Where(x => x.UserId == currentUser.Id).FirstOrDefault();
                ChatMessage     message     = new ChatMessage();
                message.ChatChannelUserId = channelUser.Id;
                message.CreatedOn         = DateTime.Now;
                message.isCorrect         = true;
                message.isRead            = false;
                message.Text = currentMessageText;
                await messageService.SendMessage(message);
            }
            else
            {
                ChatChannel channel = null;
                if (playerAdvert != null && opponentAdvert == null)
                {
                    channel = await messageService.GetChatChannel(playerAdvert.Id, playerAdvert.UserId, currentUser.Id, "Player");
                }
                else if (playerAdvert == null && opponentAdvert != null)
                {
                    channel = await messageService.GetChatChannel(opponentAdvert.Id, Convert.ToInt32(opponentAdvert.ownerId), currentUser.Id, "Opponent");
                }

                if (channel != null)
                {
                    mainChannel = channel;

                    List <ChatChannelUser> channelUsers = mainChannel.ChatChannelUsers;
                    ChatChannelUser        channelUser  = mainChannel.ChatChannelUsers.Where(x => x.UserId == currentUser.Id).FirstOrDefault();
                    ChatMessage            message      = new ChatMessage();
                    message.ChatChannelUserId = channelUser.Id;
                    message.CreatedOn         = DateTime.Now;
                    message.isCorrect         = true;
                    message.isRead            = false;
                    message.Text = currentMessageText;
                    await messageService.SendMessage(message);
                }
                else
                {
                    if (playerAdvert != null && opponentAdvert == null)
                    {
                        channel = await messageService.CreateChannelAndSendMessage(playerAdvert.Id, playerAdvert.UserId, currentUser.Id, "Player", currentMessageText);
                    }
                    else if (playerAdvert == null && opponentAdvert != null)
                    {
                        channel = await messageService.CreateChannelAndSendMessage(opponentAdvert.Id, Convert.ToInt32(opponentAdvert.ownerId), currentUser.Id, "Opponent", currentMessageText);
                    }
                    if (channel != null)
                    {
                        mainChannel = channel;
                    }
                }
            }
        }
示例#6
0
        public void SendChannelModesToJoiner(ChatChannelUser joiner)
        {
            string modes = Property.ChannelMode.GetChannelMode();

            string modesMessage =
                MODEReply.BuildChannelModesReply(
                    joiner, Property.ChannelName, modes);

            joiner.Session.SendAsync(modesMessage);
        }
        private void GetAllKeyValues(ChatChannelUser user)
        {
            string flags = user.GetUserValuesString(_request.Keys);

            //todo check the paramemter 
            _sendingBuffer +=
                GETCKEYReply.BuildGetCKeyReply(
                    user.UserInfo.NickName,
                    _channel.Property.ChannelName,
                    _request.Cookie, flags);
        }
示例#8
0
 public bool IsUserBanned(ChatChannelUser user)
 {
     if (Property.BanList.Where(u => u.Session.Id == user.Session.Id).Count() == 1)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
示例#9
0
        public void AddBindOnUserAndChannel(ChatChannelUser joiner)
        {
            if (!Property.ChannelUsers.Contains(joiner))
            {
                Property.ChannelUsers.Add(joiner);
            }

            if (!joiner.UserInfo.JoinedChannels.Contains(this))
            {
                joiner.UserInfo.JoinedChannels.Add(this);
            }
        }
示例#10
0
        public void LeaveChannel(ChatChannelUser user, string reason)
        {
            if (Property.IsPeerServer && user.IsChannelCreator)
            {
                KickAllUserAndShutDownChannel(user);
            }
            else
            {
                MultiCastLeave(user, reason);
            }

            RemoveBindOnUserAndChannel(user);
        }
示例#11
0
        public void RemoveBindOnUserAndChannel(ChatChannelUser leaver)
        {
            if (Property.ChannelUsers.Contains(leaver))
            {
                Property.ChannelUsers.TryTake(out leaver);
            }

            if (leaver.UserInfo.JoinedChannels.Contains(this))
            {
                ChatChannel channel = this;
                leaver.UserInfo.JoinedChannels.TryTake(out channel);
            }
        }
示例#12
0
        public virtual bool MultiCastExceptSender(ChatChannelUser sender, string message)
        {
            foreach (var o in Property.ChannelUsers)
            {
                if (o.Session.Id == sender.Session.Id)
                {
                    continue;
                }
                o.Session.SendAsync(message);
            }

            return(true);
        }
示例#13
0
        public void MultiCastJoin(ChatChannelUser joiner)
        {
            string joinMessage =
                JOINReply.BuildJoinReply(
                    joiner, Property.ChannelName);

            string modes =
                Property.ChannelMode.GetChannelMode();

            joinMessage +=
                MODEReply.BuildModeReply(
                    Property.ChannelName, modes);

            MultiCast(joinMessage);
        }
示例#14
0
        public bool GetChannelUserBySession(ChatSession session, out ChatChannelUser user)
        {
            var result = Property.ChannelUsers.Where(u => u.Session.Equals(session));

            if (result.Count() == 1)
            {
                user = result.First();
                return(true);
            }
            else
            {
                user = null;
                return(false);
            }
        }
示例#15
0
        public bool GetChannelUserByNickName(string nickname, out ChatChannelUser user)
        {
            var result = Property.ChannelUsers.Where(u => u.Session.UserInfo.NickName == nickname);

            if (result.Count() == 1)
            {
                user = result.First();
                return(true);
            }
            else
            {
                user = null;
                return(false);
            }
        }
示例#16
0
 protected override void DataOperation()
 {
     base.DataOperation();
     _user = new ChatChannelUser(_session);
     if (ChatChannelManager.GetChannel(_request.ChannelName, out _channel))
     {
         //join
         JoinChannel();
     }
     else
     {
         //create
         CreateChannel();
     }
 }
示例#17
0
        public async Task <JoinChannelResultModel> JoinToPrivateChannel(JoinChannelRequestModel model)
        {
            var currentUser = await _authService.GetAuthorizedUser();

            var user = await DbContext.Users.FindAsync(model.ChannelId);

            if (user == null)
            {
                throw new EntityNotFoundException();
            }

            var channel = new ChatChannel();

            await DbContext.AddAsync(channel);

            await DbContext.SaveChangesAsync();

            var receiver = new ChatChannelUser
            {
                UserId    = model.ChannelId,
                ChannelId = channel.Id
            };

            var sender = new ChatChannelUser
            {
                UserId    = currentUser.Id,
                ChannelId = channel.Id
            };

            await DbContext.AddAsync(receiver);

            await DbContext.AddAsync(sender);

            await DbContext.SaveChangesAsync();

            //creating private chnannel with receiver 1st
            await _chatProvider.UserJoinedToChannel(user, channel.Id);

            //adding sender to this private chnannel
            await _chatProvider.UserJoinedToChannel(currentUser, channel.Id);

            return(new JoinChannelResultModel {
                ChannelId = channel.Id
            });
        }
        private void GetUserKeyValue(ChatChannelUser user)
        {
            //we do not have key value so we do not construct getckey response
            if (user.UserKeyValue.Count == 0)
            {
                _errorCode = ChatError.DataOperation;
                return;
            }

            if (_request.Keys.Count == 1 && _request.Keys.Contains("b_flags"))
            {
                GetUserBFlagsOnly(user);
            }
            else
            {
                GetAllKeyValues(user);
            }
        }
示例#19
0
        private void KickAllUserAndShutDownChannel(ChatChannelUser kicker)
        {
            foreach (var user in Property.ChannelUsers)
            {
                //kick all user out
                string kickMsg =
                    KICKReply.BuildKickReply(
                        Property.ChannelName, kicker, user, "Server Hoster leaves channel");

                user.Session.SendAsync(kickMsg);
            }

            ChatChannelManager.RemoveChannel(this);

            GameServer.DeleteSimilarServer(
                kicker.Session.RemoteEndPoint,
                kicker.Session.UserInfo.GameName);
        }
示例#20
0
        public void SendChannelUsersToJoiner(ChatChannelUser joiner)
        {
            string modes = Property.ChannelMode.GetChannelMode();

            string buffer =
                MODEReply.BuildModeReply(
                    Property.ChannelName, modes);

            string nicks = "";

            foreach (var user in Property.ChannelUsers)
            {
                if (user.IsChannelCreator)
                {
                    nicks += "@" + user.UserInfo.NickName + " ";
                }
                else
                {
                    nicks += user.UserInfo.NickName + " ";
                }
            }

            // crysis2's nickname is * length =1
            if (nicks.Length < 1)
            {
                return;
            }

            //if user equals last user in channel we do not add space after it
            nicks = nicks.Substring(0, nicks.Length - 1);

            //check the message :@<nickname> whether broadcast char @ ?
            buffer += NAMEReply.BuildNameReply(
                joiner.UserInfo.NickName, Property.ChannelName, nicks);

            buffer += NAMEReply.BuildEndOfNameReply(
                joiner.UserInfo.NickName, Property.ChannelName);

            joiner.Session.SendAsync(buffer);
        }
示例#21
0
 public static string BuildPartReply(ChatChannelUser leaver, string channelName, string reason)
 {
     return(leaver.BuildReply(PART, channelName, reason));
 }
示例#22
0
 public static string BuildJoinReply(ChatChannelUser joiner, string channelName)
 {
     return(joiner.BuildReply(JOIN, channelName));
 }
示例#23
0
 public static string BuildKickReply(string channelName, ChatChannelUser kicker, ChatChannelUser kickee, string reason)
 {
     return(kicker.BuildReply(KICK,
                              $"KICK {channelName} {kicker.UserInfo.NickName} {kickee.UserInfo.NickName}",
                              reason));
 }
示例#24
0
 public static string BuildChannelModesReply(ChatChannelUser user, string channelName, string modes)
 {
     return(ChatCommandBase.BuildReply(ChannelModels,
                                       $"{user.UserInfo.NickName} {channelName} {modes}"));
 }
示例#25
0
 public static string BuildGetChanKeyReply(ChatChannelUser user, string channelName, string cookie, string flags)
 {
     return(user.BuildReply(GetChanKey, $"param1 {channelName} {cookie} {flags}"));
 }
示例#26
0
 public bool IsUserExisted(ChatChannelUser user)
 {
     return(GetChannelUserBySession(user.Session, out _));
 }