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}", ""); }
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 }); }
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); }
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; } } } }
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); }
public bool IsUserBanned(ChatChannelUser user) { if (Property.BanList.Where(u => u.Session.Id == user.Session.Id).Count() == 1) { return(true); } else { return(false); } }
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); } }
public void LeaveChannel(ChatChannelUser user, string reason) { if (Property.IsPeerServer && user.IsChannelCreator) { KickAllUserAndShutDownChannel(user); } else { MultiCastLeave(user, reason); } RemoveBindOnUserAndChannel(user); }
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); } }
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); }
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); }
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); } }
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); } }
protected override void DataOperation() { base.DataOperation(); _user = new ChatChannelUser(_session); if (ChatChannelManager.GetChannel(_request.ChannelName, out _channel)) { //join JoinChannel(); } else { //create CreateChannel(); } }
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); } }
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); }
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); }
public static string BuildPartReply(ChatChannelUser leaver, string channelName, string reason) { return(leaver.BuildReply(PART, channelName, reason)); }
public static string BuildJoinReply(ChatChannelUser joiner, string channelName) { return(joiner.BuildReply(JOIN, channelName)); }
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)); }
public static string BuildChannelModesReply(ChatChannelUser user, string channelName, string modes) { return(ChatCommandBase.BuildReply(ChannelModels, $"{user.UserInfo.NickName} {channelName} {modes}")); }
public static string BuildGetChanKeyReply(ChatChannelUser user, string channelName, string cookie, string flags) { return(user.BuildReply(GetChanKey, $"param1 {channelName} {cookie} {flags}")); }
public bool IsUserExisted(ChatChannelUser user) { return(GetChannelUserBySession(user.Session, out _)); }