public static void EmoteMessage( ChatUser from, Channel channel, string param ) { if ( channel.CanTalk( from ) ) channel.SendIgnorableMessage( 58, from, from.GetColorCharacter() + from.Username, param ); // %1 %2 else from.SendMessage( 36 ); // The moderator of this conference has not given you speaking priviledges. }
public void JoinCallsAddUserIfValidUserIdInCookieAndUserList() { var repository = new ChatRepository(); var user = new ChatUser { Id = "1234", Name = "John", Hash = "Hash" }; repository.Users.Add(user); var chat = new ChatHub(repository); var connection = new Mock<IConnection>(); var prinicipal = new Mock<IPrincipal>(); var cookies = new HttpCookieCollection(); cookies.Add(new HttpCookie("userid", "1234")); var clientState = new TrackingDictionary(); string clientId = "20"; chat.Agent = new ClientAgent(connection.Object, "Chat"); chat.Caller = new SignalAgent(connection.Object, clientId, "Chat", clientState); chat.Context = new HubContext(clientId, cookies, prinicipal.Object); chat.Join(); Assert.Equal("1234", clientState["id"]); Assert.Equal("John", clientState["name"]); Assert.Equal("Hash", clientState["hash"]); Assert.Equal("20", user.ClientId); // Need a better way to verify method name and arguments connection.Verify(m => m.Broadcast("Chat.20", It.IsAny<object>()), Times.Once()); }
private void btn_newUser_Click(object sender, EventArgs e) { chatCopy = userProto.Clone(); chatCopy.Name = (tb_newUserName.Text); UserList.Add(chatCopy); cb_Users1.Items.Add(tb_newUserName.Text); cb_Users2.Items.Add(tb_newUserName.Text); tb_newUserName.Text = " "; }
public static void PrivateMessage( ChatUser from, Channel channel, string param ) { int indexOf = param.IndexOf( ' ' ); string name = param.Substring( 0, indexOf ); string text = param.Substring( indexOf + 1 ); ChatUser target = ChatSystem.SearchForUser( from, name ); if ( target == null ) return; if ( target.IsIgnored( from ) ) from.SendMessage( 35, target.Username ); // %1 has chosen to ignore you. None of your messages to them will get through. else if ( target.IgnorePrivateMessage ) from.SendMessage( 42, target.Username ); // %1 has chosen to not receive private messages at the moment. else target.SendMessage( 59, from.Mobile, from.GetColorCharacter() + from.Username, text ); // [%1]: %2 }
private void DoAskAndAddIdentityForUser(ChatUser user) { var knownPubKeysForUser = Constants.ApplicationDatabase.GetUserInfoByName(user.SkypeHandle).KnownPublicKeys; var userPublicKeyBytes = user.IdentityPublicKey; var questionForm = new UserIdentityReceivedForm(); questionForm.SkypeFriendlyName = UiUtils.GetSkypeUserDisplayName(user.SkypeUserObject); questionForm.SkypeName = user.SkypeHandle; questionForm.Fingerprint = UiUtils.GetIdentityFingerprint(userPublicKeyBytes); questionForm.ShowDialog(); if (questionForm.DialogResult != DialogResult.Yes) { if (!questionForm.BlockNew) return; // block this user from showing the window again with this identity Constants.ApplicationDatabase.GetUserInfoByName(user.SkypeHandle).BlockIdentityQueries .Add(UiUtils.GetIdentityFingerprint(userPublicKeyBytes)); return; } // user accepted, add the key! knownPubKeysForUser.Add(userPublicKeyBytes); Constants.SaveAppDatabase(); }
private bool onUserEnter(DataMessage message) { message.createReader(); Dictionary<string, object> json = message.readJson(); message.closeReader(); ChatUser u = new ChatUser(); if (u.fromJson(json)) { if (u.userId == systemController.getUserInfo().userId) { postUpdate(UiUpdates.GameIsReady, null); } else { if (!users.ContainsKey(u.userId)) { users.Add(u.userId, u); } postUpdate(UiUpdates.NewUser, u); } } return false; }
public void OnUserListUpdated(object aSender, EventArgs aEventArgs) { lock (iLock) { var args = (UserEventArgs)aEventArgs; //Console.WriteLine("A: {0} B: {1}", args.Changes.Count(), args.SubscriptionEnded); foreach (var userChange in args.Changes) { ChatUser chatUser; if (!iUsers.TryGetValue(userChange.UserId, out chatUser) && userChange.NewValue != null) { chatUser = new ChatUser { User = userChange.NewValue, TabCount = 0 }; iUsers[userChange.UserId] = chatUser; } string status = chatUser == null && chatUser.TabCount > 0 ? "online" : "offline"; Broadcast( new JsonObject { { "type", "user"}, { "userid", userChange.UserId }, { "oldValue", UserToJson(userChange.OldValue, status) }, { "newValue", UserToJson(userChange.NewValue, status) } }); } } }
void INotificationService.PostNotification(ChatRoom room, ChatUser user, string message) { Clients.User(user.Id).postNotification(message, room.Name); }
public bool Send(ClientMessage clientMessage) { //Commented out for resting purposes // TODO: set env variable //CheckStatus(); //reject it if it's too long if (_settings.MaxMessageLength > 0 && clientMessage.Content.Length > _settings.MaxMessageLength) { throw new HubException(String.Format(LanguageResources.SendMessageTooLong, _settings.MaxMessageLength)); } //See if this is a valid command (starts with /) if (TryHandleCommand(clientMessage.Content, clientMessage.Room)) { return(true); } var userId = Context.User.GetUserId(); ChatUser user = _repository.VerifyUserId(userId); // this line breaks when we message in a new room ChatRoom room = _repository.VerifyUserRoom(_cache, user, clientMessage.Room); if (room == null || (room.Private && user.AllowedRooms.Select(r => r.ChatRoomKeyNavigation).ToList().Contains(room))) { return(false); } // REVIEW: Is it better to use the extension method room.EnsureOpen here? if (room.Closed) { throw new HubException(String.Format(LanguageResources.SendMessageRoomClosed, clientMessage.Room)); } // Update activity *after* ensuring the user, this forces them to be active UpdateActivity(user, room); // Create a true unique id and save the message to the db string id = Guid.NewGuid().ToString("d"); // Ensure the message is logged ChatMessage chatMessage = _chatService.AddMessage(user, room, id, clientMessage.Content); room.ChatMessages.Add(chatMessage); // Save changes _repository.CommitChanges(); var messageViewModel = new MessageViewModel(chatMessage); if (clientMessage.Id == null) { // If the client didn't generate an id for the message then just // send it to everyone. The assumption is that the client has some ui // that it wanted to update immediately showing the message and // then when the actual message is roundtripped it would "solidify it". Clients.Group(room.Name).addMessage(messageViewModel, room.Name); } else { // If the client did set an id then we need to give everyone the real id first Clients.OthersInGroup(room.Name).addMessage(messageViewModel, room.Name); // Now tell the caller to replace the message Clients.Caller.replaceMessage(clientMessage.Id, messageViewModel, room.Name); } // Add mentions //AddMentions(chatMessage); //var urls = UrlExtractor.ExtractUrls(chatMessage.Content); //if (urls.Count > 0) //{ // _resourceProcessor.ProcessUrls(urls, Clients, room.Name, chatMessage.Id); //} return(true); }
public override void Execute(CommandContext context, CallerContext callerContext, ChatUser callingUser, string[] args) { string message = String.Join(" ", args).Trim(); ChatService.ValidateNote(message); callingUser.AfkNote = String.IsNullOrWhiteSpace(message) ? null : message; callingUser.IsAfk = true; context.NotificationService.ChangeNote(callingUser); context.Repository.CommitChanges(); }
private void TradeUser(ChatUser user) { tradeUserMethod.Invoke(target, new object[] { user }); }
private void ChallengeUser(ChatUser user) { challengeUserMethod.Invoke(target, new object[] { user }); }
private static void AddOrUpdateUser(ChatUser user) { lock (UserCacheLock) { var u = UserCache.SingleOrDefault(o => o.ConnectionId == user.ConnectionId); if (u != null) UserCache.Remove(u); UserCache.Add(user); } }
public static void ChangeChannelPassword( ChatUser from, Channel channel, string param ) { channel.Password = param; from.SendMessage( 60 ); // The password to the conference has been changed. }
public static void LeaveChat( ChatUser from, Channel channel, string param ) { ChatUser.RemoveChatUser( from ); }
/// <summary> /// Replies to a specific user in a channel. /// </summary> public virtual MessageSendResult Reply(ChatChannel channel, ChatUser user, string message) { return(SendMessage(channel, $"{(Capabilities.AtMention ? "@" : "")}{user.AddressableName}, {message}")); }
public override void Execute(CommandContext context, CallerContext callerContext, ChatUser callingUser, string[] args) { string newWelcome = String.Join(" ", args).Trim(); ChatService.ValidateWelcome(newWelcome); newWelcome = String.IsNullOrWhiteSpace(newWelcome) ? null : newWelcome; ChatRoom room = context.Repository.VerifyUserRoom(context.Cache, callingUser, callerContext.RoomName); context.Service.ChangeWelcome(callingUser, room, newWelcome); context.NotificationService.ChangeWelcome(callingUser, room); }
private void ProfileUser(ChatUser user) { profileUserMethod.Invoke(target, new object[] { user }); }
private void OnUpdateActivity(ChatUser user, ChatRoom room) { var userViewModel = new UserViewModel(user); Clients.Group(room.Name).updateActivity(userViewModel, room.Name); }
private void OpenLink(ChatUser user) { this.CloseUserMenuinfo.Invoke(target, null); Process.Start(this.globallink); }
void INotificationService.UnallowUser(ChatUser targetUser, ChatRoom targetRoom, ChatUser callingUser) { // Kick the user from the room when they are unallowed ((INotificationService)this).KickUser(targetUser, targetRoom, callingUser, null); // Tell this client it's no longer allowed Clients.User(targetUser.Id).unallowUser(targetRoom.Name); // Tell the calling client the granting permission into the room was successful Clients.Caller.userUnallowed(targetUser.Name, targetRoom.Name); }
private void CopyLink(ChatUser user) { this.CloseUserMenuinfo.Invoke(target, null); systemCopyBufferProperty.SetValue(null, this.globallink, null); }
void INotificationService.LeaveRoom(ChatUser user, ChatRoom room) { LeaveRoom(user, room); }
private void whisperclick(ChatUser user) { this.CloseUserMenuinfo.Invoke(target,null); App.ArenaChat.OpenWhisperRoom(user.name); }
private bool onReceivePlayersList(DataMessage message) { message.createReader(); int callback = message.readInt32(); if (callback != myCallback) { Debug.LogError("receive users list, but invalid Callback"); } Dictionary<string, object> json = message.readJson(); message.closeReader(); object[] usersJson = (object[])json["users"]; for (int i = 0; i < usersJson.Length; i++) { ChatUser u = new ChatUser(); if (u.fromJson((Dictionary<string, object>)usersJson[i])) { users[u.userId] = u; } } postUpdate(UiUpdates.UpdateUsersList, null); sendUserReady(); return false; }
private void copyDeckMenu(ChatUser user, string deck) { Vector3 mousePosition = Input.mousePosition; // need 30 pixels of extra space per item added Rect rect = new Rect(Mathf.Min((float)(Screen.width - 105), mousePosition.x), Mathf.Min((float)(Screen.height - 90 - 5), (float)Screen.height - mousePosition.y), 100f, 30f); this.globallink = deck; Gui.ContextMenu<ChatUser> userContextMenu = new Gui.ContextMenu<ChatUser>(user, rect); userContextMenu.add("Copy Deck", new Gui.ContextMenu<ChatUser>.URCMCallback(CopyLink)); if (userContextMenu != null) { userContextMenuField.SetValue(target, userContextMenu); App.AudioScript.PlaySFX("Sounds/hyperduck/UI/ui_button_click"); } }
/// <summary> /// 接收信息 /// </summary> /// <param name="session"></param> /// <param name="value"></param> void ws_NewMessageReceived(WebSocketSession session, string value) { //接收消息根据消息类型分开处理 //并向不同的人推送信息 var str = value.Split(','); if (str[0] == "100")//分销系统用户登录验证 { //100、ID、发起人、发起人单位ID、发起人单位、联系人、电话 //注type 2为分销系统用户 if (str.Length != 7) return; ChatUser chatUser = null; #region 分销系统账户 var distUser = distributionUserList.FirstOrDefault(p => p.DistributionUserId == str[1]); if (distUser == null) { distUser = new DistributionUser() { DistributionUserId = str[1], DistributionUserName = str[2], DistributionUserOrgId = str[3], DistributionUserOrgName = str[4], ContactName = str[5], ContactPhone = str[6] }; distributionUserList.Add(distUser); chatUser = new ChatUser() { ChatUserId = Guid.NewGuid().ToString(), Name = distUser.DistributionUserName, OrgName = distUser.DistributionUserOrgName, UserId = distUser.DistributionUserId, UserType = 2 }; chatUserList.Add(chatUser); } else { chatUser = chatUserList.FirstOrDefault(p => p.UserId == distUser.DistributionUserId && p.UserType == 2); if (chatUser == null) { chatUser = new ChatUser() { ChatUserId = Guid.NewGuid().ToString(), Name = distUser.DistributionUserName, OrgName = distUser.DistributionUserOrgName, UserId = distUser.DistributionUserId, UserType = 2 }; chatUserList.Add(chatUser); } } #endregion if (chatUser != null) { //记录连接 userConnection.Add(new ChatUserConnection() { ChatUserId = chatUser.ChatUserId, BaseConnection = session.SessionID }); session.Send(JsonConvert.SerializeObject(new Res("200", chatUser.ChatUserId))); List<Room> list = new List<Room>(); //得到自己的聊天会话 foreach (var item in room) { if (item.RoomMembers.Any(a => a.ChatUserType == ChatUserType.Submit && a.ChatUser.ChatUserId == chatUser.ChatUserId)) list.Add(item); } session.Send(JsonConvert.SerializeObject(new Res("210", list))); //分类 session.Send(JsonConvert.SerializeObject(new Res("205", tagList.Select(s => new { Id = s.Id, Name = s.Name })))); } else { session.Send(JsonConvert.SerializeObject(new Res("200", "0"))); } } if (str[0] == "110")//OA系统用户登录验证 { // 110,Id #region OA系统用户登录验证 if (str.Length != 2) ; var user = userList.FirstOrDefault(p => p.Id == str[1]); ChatUser chatUser = chatUserList.FirstOrDefault(p => p.UserId == user.Id && p.UserType == 1); if (chatUser != null) { //记录连接 userConnection.Add(new ChatUserConnection() { ChatUserId = chatUser.ChatUserId, BaseConnection = session.SessionID }); session.Send(JsonConvert.SerializeObject(new Res("200", chatUser.ChatUserId))); //所属自己的聊天会话 List<Room> list = new List<Room>(); //得到自己的聊天会话 foreach (var item in room) { if (item.RoomMembers.Any(a => a.ChatUserType != ChatUserType.Submit && a.ChatUser.ChatUserId == chatUser.ChatUserId)) list.Add(item); } session.Send(JsonConvert.SerializeObject(new Res("210", list))); } else { session.Send(JsonConvert.SerializeObject(new Res("200", "0"))); } #endregion } if (str[0] == "101")//注:只能是分销用户发起创建聊天室 { //101,chatUserId,tag|tag,消息主题 #region 创建聊天室 var tagstr = str[2].Split('|'); var chatUser = chatUserList.FirstOrDefault(p => p.ChatUserId == str[1]); if (chatUser.UserType == 1) return; var t = tagList.Where(p => tagstr.Contains(p.Id)).ToList(); //生成房间号 var roomId = Guid.NewGuid().ToString(); var r = new Room() { Id = roomId, Name = str[2], RoomMembers = new List<RoomMembers>(), Tag = t, State = MessgaeState.Init }; r.State = MessgaeState.AllocateProcessing; r.RoomMembers.Add(new RoomMembers() { ChatUser = chatUser, ChatUserType = ChatUserType.Submit }); var tagUserList = new List<User>(); //得到房间所有用户列表 foreach (var item in r.Tag) { foreach (var user in userList) { if (user.Tag.Any(a => a.Id == item.Id)) { if (tagUserList.Any(a => a.Id == user.Id)) continue; tagUserList.Add(user); } } } var userIds = tagUserList.Select(s => s.Id).ToList(); foreach (var item in chatUserList.Where(p => p.UserType == 1 && userIds.Contains(p.UserId)).ToList()) { r.RoomMembers.Add(new RoomMembers() { ChatUser = item, ChatUserType = ChatUserType.Visitor }); } room.Add(r); //注:此处只推送基础连接 // 这里是创建房间 var sessionIds = new List<string>(); var weixin = new List<string>(); foreach (var item in r.RoomMembers) { var temp = userConnection.FirstOrDefault(p => p.ChatUserId == item.ChatUser.ChatUserId); if (temp != null) { sessionIds.Add(temp.BaseConnection); } else//没有连接推送给微信 { var user = userList.FirstOrDefault(p => p.Id == item.ChatUser.UserId && item.ChatUserType != ChatUserType.Submit); weixin.Add(user.Name); } } foreach (var sendSession in ws.GetAllSessions()) { if (sessionIds.Contains(sendSession.SessionID)) { sendSession.Send(JsonConvert.SerializeObject(new Res("210", room))); } } session.Send(JsonConvert.SerializeObject(new Res("201", new { roomId }))); #endregion } if (str[0] == "111")//接单 { //111,chatUserId,roomId var chatUser = chatUserList.FirstOrDefault(p => p.ChatUserId == str[1]); var r = room.FirstOrDefault(p => p.Id == str[2]); r.State = MessgaeState.Processing; var roomMember = r.RoomMembers.FirstOrDefault(p => p.ChatUser.ChatUserId == chatUser.ChatUserId); roomMember.ChatUserType = ChatUserType.Receive; //注:此处只推送基础连接 // 这里是创建房间 var sessionIds = new List<string>(); var weixin = new List<string>(); foreach (var item in r.RoomMembers) { var temp = userConnection.FirstOrDefault(p => p.ChatUserId == item.ChatUser.ChatUserId); if (temp != null) { sessionIds.Add(temp.BaseConnection); } else//没有连接推送给微信 { var user = userList.FirstOrDefault(p => p.Id == item.ChatUser.UserId && item.ChatUserType != ChatUserType.Submit); weixin.Add(user.Name); } } foreach (var sendSession in ws.GetAllSessions()) { if (sessionIds.Contains(sendSession.SessionID)) { sendSession.Send(JsonConvert.SerializeObject(new Res("210", room))); } } } //进入聊天室 if (str[0] == "102") { //102,chatUserId,roomId var r = room.FirstOrDefault(p => p.Id == str[2]); var chatUser = chatUserList.FirstOrDefault(p => p.ChatUserId == str[1]); //判断当前用户是否有权限进入此聊天 if (!r.RoomMembers.Any(p => p.ChatUser.ChatUserId == chatUser.ChatUserId)) return; //OA类型用户不能进行正在分配处理人的状态聊天室 if (r.State == MessgaeState.AllocateProcessing && chatUser.UserType == 1) return; var usercon = userConnection.FirstOrDefault(p => p.ChatUserId == chatUser.ChatUserId); //创建聊天连接 usercon.ChatConnection = new ChatConnection(); usercon.ChatConnection.RoomId = r.Id; usercon.ChatConnection.SessionId = session.SessionID; var msgStr = chatUser.Name + "加入会话"; r.LatestSendMsgDate = DateTime.Now; r.LatestMsg = msgStr; foreach (var item in r.RoomMembers) { var msg = new Message(); msg.Msg = msgStr; msg.RoomId = r.Id; msg.SendDate = DateTime.Now; msg.ReceiveUser = item.ChatUser; messageList.Add(msg); } PushMsg(session); } //发送信息 if (str[0] == "103") { //103,chatUserId,roomId,msg var r = room.FirstOrDefault(p => p.Id == str[2]); var chatUser = chatUserList.FirstOrDefault(p => p.ChatUserId == str[1]); //判断当前用户是否有权限进入此聊天 if (!r.RoomMembers.Any(p => p.ChatUser.ChatUserId == chatUser.ChatUserId)) return; var msgStr = str[3]; r.LatestSendMsgDate = DateTime.Now; r.LatestMsg = msgStr; foreach (var item in r.RoomMembers) { var msg = new Message(); msg.Msg = msgStr; msg.RoomId = r.Id; msg.SendDate = DateTime.Now; msg.ReceiveUser = item.ChatUser; messageList.Add(msg); } PushMsg(session); } //退出聊天室 if (str[0] == "104") { //104,chatUserId,roomId var r = room.FirstOrDefault(p => p.Id == str[2]); var chatUser = chatUserList.FirstOrDefault(p => p.ChatUserId == str[1]); //判断当前用户是否有权限进入此聊天 if (!r.RoomMembers.Any(p => p.ChatUser.ChatUserId == chatUser.ChatUserId)) return; var msgStr = chatUser.Name + "离开会话"; r.LatestSendMsgDate = DateTime.Now; r.LatestMsg = msgStr; foreach (var item in r.RoomMembers) { var msg = new Message(); msg.Msg = msgStr; msg.RoomId = r.Id; msg.SendDate = DateTime.Now; msg.ReceiveUser = item.ChatUser; messageList.Add(msg); } var usercon = userConnection.FirstOrDefault(p => p.ChatUserId == chatUser.ChatUserId); if (usercon == null) return; usercon.ChatConnection = null; PushMsg(session); } if (str[0] == "400")//关闭所有连接 { var usercon = userConnection.FirstOrDefault(p => p.ChatUserId == str[1]); if (!string.IsNullOrEmpty(usercon.BaseConnection)) ws.GetAllSessions().FirstOrDefault(p => p.SessionID == usercon.ChatConnection.SessionId).Close(); if (usercon.ChatConnection != null && !string.IsNullOrEmpty(usercon.ChatConnection.SessionId)) ws.GetAllSessions().FirstOrDefault(p => p.SessionID == usercon.BaseConnection).Close(); } }
private void CreateUserMenu(ChatUser user , object infotarget, int length) { bool canOpenContextMenu = (bool)typeof(ChatUI).GetField("canOpenContextMenu", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(infotarget); Gui.ContextMenu<ChatUser> userContextMenu = null; if (!canOpenContextMenu) { return; } Vector3 mousePosition = Input.mousePosition; Rect rect = new Rect(Mathf.Min((float)(Screen.width - 105), mousePosition.x+100), Mathf.Min((float)(Screen.height - 90 - 5), (float)Screen.height - mousePosition.y), Mathf.Max(100f,length+10), 30f); userContextMenu = new Gui.ContextMenu<ChatUser>(user, rect); userContextMenu.add(user.name, new Gui.ContextMenu<ChatUser>.URCMCallback(ProfileUser)); if (user.acceptTrades) { userContextMenu.add("Trade", new Gui.ContextMenu<ChatUser>.URCMCallback(TradeUser)); } userContextMenu.add("Whisper", new Gui.ContextMenu<ChatUser>.URCMCallback(whisperclick)); if (user.acceptChallenges) { userContextMenu.add("Challenge", new Gui.ContextMenu<ChatUser>.URCMCallback(ChallengeUser)); } userContextMenuField.SetValue(target, userContextMenu); App.AudioScript.PlaySFX("Sounds/hyperduck/UI/ui_button_click"); //Console.WriteLine("bums"); }
private ChatUser AddUser(string newUserName) { var user = new ChatUser(newUserName, GetMD5Hash(newUserName)); user.ConnectionId = Context.ConnectionId; _users[newUserName] = user; _userRooms[newUserName] = new HashSet<string>(StringComparer.OrdinalIgnoreCase); Caller.name = user.Name; Caller.hash = user.Hash; Caller.id = user.Id; Caller.addUser(user); return user; }
public void HeartBeat() { ChatUser user = new ChatUser(); user.id = UserInfo.Id; user.nick = UserInfo.Apodo; if (!_usersActive.ContainsKey(IdMovement)) _usersActive.Add(IdMovement, new Dictionary<int,ChatUser>()); if (!_usersActive[IdMovement].ContainsKey(user.id)) { _usersActive[IdMovement].Add(user.id, user); } else { if (!_usersActive[IdMovement][user.id].active) { _usersActive[IdMovement][user.id].SetActive(true); } _usersActive[IdMovement][user.id].activeCounter = 0; } }
private static void NudgeRoom(CommandContext context, CallerContext callerContext, ChatUser callingUser) { ChatRoom room = context.Repository.VerifyUserRoom(context.Cache, callingUser, callerContext.RoomName); var betweenNudges = TimeSpan.FromMinutes(1); if (room.LastNudged == null || room.LastNudged < DateTime.Now.Subtract(betweenNudges)) { room.LastNudged = DateTime.Now; context.Repository.CommitChanges(); context.NotificationService.NudgeRoom(room, callingUser); } else { throw new InvalidOperationException(String.Format("Room can only be nudged once every {0} seconds", betweenNudges.TotalSeconds)); } }
private ChatUser GetChatUser(int userId) { var db = new IndignadoDBDataContext(); var user = db.Usuarios.SingleOrDefault(u => (u.id == userId)); if (user == null) throw new FaultException("Ese usuario no existe!"); ChatUser chatUser = new ChatUser(); chatUser.id = user.id; chatUser.nick = user.nombre; return chatUser; }
public void ResponseSignIn(CookieResponseSignInContext context) { var authResult = new AuthenticationResult { Success = true }; ChatUser loggedInUser = GetLoggedInUser(context); var principal = new ClaimsPrincipal(context.Identity); // Do nothing if it's authenticated if (principal.IsAuthenticated()) { EnsurePersistentCookie(context); return; } ChatUser user = _repositoryChatUserIdentity.GetUser(principal); authResult.ProviderName = principal.GetIdentityProvider(); // The user exists so add the claim if (user != null) { if (loggedInUser != null && user != loggedInUser) { // Set an error message authResult.Message = String.Format(LanguageResources.Account_AccountAlreadyLinked, authResult.ProviderName); authResult.Success = false; // Keep the old user logged in context.Identity.AddClaim(new Claim(ChatClaimTypes.Identifier, loggedInUser.Id)); } else { // Login this user AddClaim(context, user); } } else if (principal.HasAllClaims()) { ChatUser targetUser = null; // The user doesn't exist but the claims to create the user do exist if (loggedInUser == null) { // New user so add them user = _membershipService.AddUser(principal); targetUser = user; } else { // If the user is logged in then link _membershipService.LinkIdentity(loggedInUser, principal); _repository.Update(targetUser); authResult.Message = String.Format(LanguageResources.Account_AccountLinkedSuccess, authResult.ProviderName); targetUser = loggedInUser; } AddClaim(context, targetUser); } else if (!principal.HasPartialIdentity()) { // A partial identity means the user needs to add more claims to login context.Identity.AddClaim(new Claim(ChatClaimTypes.PartialIdentity, "true")); } var cookieOptions = new CookieOptions { HttpOnly = true }; context.Response.Cookies.Append(Constants.AuthResultCookie, JsonConvert.SerializeObject(authResult), cookieOptions); }
private ToolTipPropertySet CreateTip(ChatUser user) { // get the image to use Image icon = null; if (m_resourceProvider != null) { icon = m_resourceProvider.Icons.GetImageFor(user.Stats.Product); } // get the color to use. Color background = Color.Black; if (ProductTipColors.ContainsKey(user.Stats.Product)) { background = ProductTipColors[user.Stats.Product]; } // generate description StringBuilder description = new StringBuilder(); description.Append("Product: "); description.AppendLine(user.Stats.Product.Name); description.Append("Ping: "); description.AppendLine(user.Ping.ToString(CultureInfo.InvariantCulture)); description.Append("Flags: "); description.AppendLine(user.Flags.ToString()); description.AppendLine(); if (user.Stats is StarcraftStats) { StarcraftStats stats = user.Stats as StarcraftStats; description.Append("Wins: "); description.AppendLine(stats.Wins.ToString(CultureInfo.InvariantCulture)); description.Append("Rank: "); description.AppendLine(stats.LadderRank.ToString(CultureInfo.InvariantCulture)); description.Append("Rating: "); description.AppendLine(stats.LadderRating.ToString(CultureInfo.InvariantCulture)); } else if (user.Stats is Diablo2Stats) { Diablo2Stats stats = user.Stats as Diablo2Stats; description.AppendLine(stats.IsExpansionCharacter ? "Expansion character" : "Classic character"); if (stats.IsHardcoreCharacter) { description.Append("Hardcore "); } if (stats.IsLadderCharacter) { description.Append("Ladder "); } description.Append(stats.IsRealmCharacter ? "Realm " : "Open "); description.AppendLine("character"); if (stats.IsRealmCharacter) { description.AppendFormat(CultureInfo.InvariantCulture, "Level {0} {1}", stats.Level, stats.CharacterClass); description.AppendLine(); description.AppendLine(stats.CharacterName); description.AppendLine(stats.Difficulty.ToString()); } } else if (user.Stats is Warcraft3Stats) { Warcraft3Stats stats = user.Stats as Warcraft3Stats; description.Append("Clan: "); description.AppendLine(string.IsNullOrEmpty(stats.ClanTag) ? "(none)" : stats.ClanTag); description.AppendFormat(CultureInfo.InvariantCulture, "Level: {0}", stats.Level); description.AppendLine(); } ToolTipPropertySet ttps = new ToolTipPropertySet(user.Username, description.ToString(), background, icon, Color.White, background); return(ttps); }
public ChatElement(ChatUser User, List <string> Messages) { this.User = User; this.Messages = Messages; }
public void RemoveUser(ChatUser user) { client.RemoveUser(user); }
private void UpdateActivity(ChatUser user, ChatRoom room) { UpdateActivity(user); OnUpdateActivity(user, room); }
public bool CreateNewRoom(ChatUser ourUser, string[] users, ChatRoom nameRoom) { return(client.CreateNewRoom(ourUser, users, nameRoom)); }
private void UpdateActivity(ChatUser user) { _chatService.UpdateActivity(user, Context.ConnectionId, UserAgent); _repository.CommitChanges(); }
public bool ConfirmUser(ChatUser ourName) { return(delConfirmUser(ourName)); }
void INotificationService.LogOn(ChatUser user, string clientId) { LogOn(user, clientId, reconnecting: true); }
public void CreateRoom(ChatUser ourName, ChatUser requiredName, ChatRoom nameRoom) { throw new NotImplementedException(); }
void INotificationService.OnSelfMessage(ChatRoom room, ChatUser user, string content) { Clients.Caller.sendMeMessage(user.Name, content, room.Name); Clients.Group(room.Name).sendMeMessage(user.Name, content, room.Name); }
public void ExitRoom(ChatUser user, ChatRoom room) { client.ExitRoom(user, room); }
void INotificationService.NudgeRoom(ChatRoom room, ChatUser user) { Clients.Group(room.Name).nudge(user.Name, null, room.Name); }
public void AddInRoom(ChatUser user, ChatUser ourname, ChatRoom room) { client.AddInRoom(user, ourname, room); }
public void ChatUserTest() { ChatUser user = new ChatUser(1, "name"); }
public void ToStringTest() { ChatUser user = new ChatUser(1, "name"); Assert.AreEqual("name#1", user.ToString()); }
private bool onReceiveMessage(DataMessage message) { message.createReader(); int userId = message.readInt32(); string userMessage = message.readString(); message.closeReader(); ChatUser user = getUser(userId); if (user == null) { user = new ChatUser(); user.setUnknown(userId); users.Add(userId, user); requestUserInfo(userId); } ChatDialogMessage dialogMessage = new ChatDialogMessage(userMessage, user.userId, -1); if (dialogs.ContainsKey(userId)) { dialogs[userId].messages.Add(dialogMessage); } else { ChatDialogWithUser dialog = new ChatDialogWithUser(); dialog.withUser = user; dialog.messages.Add(dialogMessage); dialogs.Add(userId, dialog); } postUpdate(UiUpdates.ReceivedMessage, dialogMessage); return false; }
public ActionResult Index(string user, bool?logOn, bool?logOff, string chatMessage) { try { if (chatModel == null) { chatModel = new ChatModel(); } //оставляем только последние 10 сообщений if (chatModel.Messages.Count > 100) { chatModel.Messages.RemoveRange(0, 90); } // если обычный запрос, просто возвращаем представление if (!Request.IsAjaxRequest()) { return(View(chatModel)); } // если передан параметр logOn else if (logOn != null && (bool)logOn) { //проверяем, существует ли уже такой пользователь if (chatModel.Users.FirstOrDefault(u => u.Name == user) != null) { throw new Exception("Пользователь с таким ником уже существует"); } else if (chatModel.Users.Count > 10) { throw new Exception("Чат заполнен"); } else { // добавляем в список нового пользователя chatModel.Users.Add(new ChatUser() { Name = user, LoginTime = DateTime.Now, LastPing = DateTime.Now }); // добавляем в список сообщений сообщение о новом пользователе chatModel.Messages.Add(new ChatMessage() { Text = user + " вошел в чат", Date = DateTime.Now }); } return(PartialView("ChatRoom", chatModel)); } // если передан параметр logOff else if (logOff != null && (bool)logOff) { LogOff(chatModel.Users.FirstOrDefault(u => u.Name == user)); return(PartialView("ChatRoom", chatModel)); } else { ChatUser currentUser = chatModel.Users.FirstOrDefault(u => u.Name == user); //для каждлого пользователя запоминаем воемя последнего обновления currentUser.LastPing = DateTime.Now; // удаляем неавтивных пользователей, если время простоя больше 15 сек List <ChatUser> toRemove = new List <ChatUser>(); foreach (Models.ChatUser usr in chatModel.Users) { TimeSpan span = DateTime.Now - usr.LastPing; if (span.TotalSeconds > 15) { toRemove.Add(usr); } } foreach (ChatUser u in toRemove) { LogOff(u); } // добавляем в список сообщений новое сообщение if (!string.IsNullOrEmpty(chatMessage)) { chatModel.Messages.Add(new ChatMessage() { User = currentUser, Text = chatMessage, Date = DateTime.Now }); } return(PartialView("History", chatModel)); } } catch (Exception ex) { //в случае ошибки посылаем статусный код 500 Response.StatusCode = 500; return(Content(ex.Message)); } }
private bool onReceiveUserInfo(DataMessage message) { message.createReader(); int callback = message.readInt32(); int result = message.readInt32(); switch(result) { case Ids.SystemResults.SUCCESS: { int requestedUsedId = message.readInt32(); Dictionary<string, object> json = message.readJson(); message.closeReader(); ChatUser user; if (users.ContainsKey(requestedUsedId)) { user = users[requestedUsedId]; } else { user = new ChatUser(); users.Add(requestedUsedId, user); } if (!user.fromJson(json)) { Debug.LogError("ReceiveUserInfo : fail to parse user data for "+requestedUsedId.ToString()); user.setUnknown(requestedUsedId); } postUpdate(UiUpdates.UserUpdated, user); } break; case Ids.Actions.SimpleChat.RESULT_NO_USER_WITH_SUCH_ID: { int requestedUsedId = message.readInt32(); message.closeReader(); Debug.LogError("ReceiveUserInfo : requested User not found id: " + requestedUsedId.ToString()); } break; case Ids.SystemResults.INVALID_SESSION: message.closeReader(); Debug.LogError("ReceiveUserInfo : Internal error - Invalid session"); break; case Ids.SystemResults.INVALID_DATA: message.closeReader(); Debug.LogError("ReceiveUserInfo : Internal error - Invalid data"); break; case Ids.SystemResults.NO_GAME_WITH_SUCH_ID: message.closeReader(); Debug.LogError("ReceiveUserInfo : Internal error - no game with such id"); break; } return false; }
public static void ParseMessage(ChatUser sender, string msg, Func <bool> callback = null) { RequestBot.COMMAND.Parse(sender, msg, 0, "", callback); }
public void sendMessage(ChatUser toUser, String textMessage) { ChatDialogMessage dialogMessage = new ChatDialogMessage(textMessage, systemController.getUserInfo().userId, -1); if (dialogs.ContainsKey(toUser.userId)) { dialogs[toUser.userId].messages.Add(dialogMessage); } else { ChatDialogWithUser dialog = new ChatDialogWithUser(); dialog.withUser = toUser; dialog.messages.Add(dialogMessage); dialogs.Add(toUser.userId, dialog); } DataMessage message = new DataMessage(Ids.Services.GAMES, Ids.Actions.SimpleChat.SEND_MESSAGE, systemController.getUserInfo().session); message.createWriter() .writerInt32(GameId) .writerInt32(toUser.userId) .writerInt32(myCallback) .writerString(textMessage) .closeWriter(); connection.addMessageToSend(message); }
public override void Execute(CommandContext context, CallerContext callerContext, ChatUser callingUser, string[] args) { if (args.Length == 0) { // Clear the flag. callingUser.Flag = null; } else { // Set the flag. string isoCode = String.Join(" ", args[0]).ToLowerInvariant(); ChatService.ValidateIsoCode(isoCode); callingUser.Flag = isoCode; } context.NotificationService.ChangeFlag(callingUser); context.Repository.CommitChanges(); }
public static bool CS_LOGIN_Handler(ISocket sock, byte[] buffer) { CS_LOGIN_Packet packet = PacketHelper.ParsePacketStruct<CS_LOGIN_Packet>(buffer); Int16 readLen = PacketHelper.ParseBodyLen(buffer); if (readLen < PacketHelper.Size(packet)) { Console.WriteLine("read length is too small({0})", readLen); return true; // socket close } // do login UserLoginData iter = ChatServer.Instance().m_UserLoginDataList.Find(x => (x.name == packet.name && x.pwd == packet.pwd)); if (iter.name == packet.name) { SC_LOGIN_RESULT_Packet result = new SC_LOGIN_RESULT_Packet(); lock (ChatServer.Instance().m_ChatUserMapLock) { ChatUser tmp; if (ChatServer.Instance().m_mapChatUser.TryGetValue(packet.name, out tmp)) { result.Result = 0; } else { result.Result = 1; ChatUser newUser = new ChatUser(); newUser.name = packet.name; newUser.UserSocket = sock; sock.Owner = newUser; ChatServer.Instance().m_mapChatUser.Add(newUser.name, newUser); } } Console.WriteLine("{0} logged in.", packet.name); PacketHelper.Send(sock, (Int16)SC_PacketType.SC_LOGIN_RESULT, result); } else { SC_LOGIN_RESULT_Packet result = new SC_LOGIN_RESULT_Packet(); result.Result = 0; Console.WriteLine("{0} log in failed.({1})", packet.name, sock.GetSocket().RemoteEndPoint.ToString()); PacketHelper.Send(sock, (Int16)SC_PacketType.SC_LOGIN_RESULT, result); } return false; }
public override void Execute(CommandContext context, CallerContext callerContext, ChatUser callingUser, string[] args) { if (context.Repository.Users.Count() == 1) { throw new InvalidOperationException("You're the only person in here..."); } if (args.Length == 0 || String.IsNullOrWhiteSpace(args[0])) { throw new InvalidOperationException("Who are you trying send a private message to?"); } var toUserName = args[0]; ChatUser toUser = context.Repository.VerifyUser(toUserName); if (toUser == callingUser) { throw new InvalidOperationException("You can't private message yourself!"); } string messageText = String.Join(" ", args.Skip(1)).Trim(); if (String.IsNullOrEmpty(messageText)) { throw new InvalidOperationException(String.Format("What did you want to say to '{0}'?", toUser.Name)); } context.NotificationService.SendPrivateMessage(callingUser, toUser, messageText); }
public static DTChatUser ChatUserToDT(ChatUser u) { DTChatUser dt = new DTChatUser(); dt.id = u.id; dt.nick = u.nick; dt.active = u.active; return dt; }
public override void Execute(CommandContext context, CallerContext callerContext, ChatUser callingUser, string[] args) { if (args.Length == 0) { NudgeRoom(context, callerContext, callingUser); } else { NudgeUser(context, callingUser, args); } }
private bool TryHandleCommand(string message) { string room = Caller.room; string name = Caller.name; message = message.Trim(); if (message.StartsWith("/")) { string[] parts = message.Substring(1).Split(' '); string commandName = parts[0]; if (commandName.Equals("nick", StringComparison.OrdinalIgnoreCase)) { string newUserName = String.Join(" ", parts.Skip(1)); if (String.IsNullOrEmpty(newUserName)) { throw new InvalidOperationException("No username specified!"); } if (newUserName.Equals(name, StringComparison.OrdinalIgnoreCase)) { throw new InvalidOperationException("That's already your username..."); } if (!_users.ContainsKey(newUserName)) { if (String.IsNullOrEmpty(name) || !_users.ContainsKey(name)) { var user = AddUser(newUserName); } else { var oldUser = _users[name]; var newUser = new ChatUser { Name = newUserName, Hash = GetMD5Hash(newUserName), Id = oldUser.Id, ConnectionId = oldUser.ConnectionId }; _users[newUserName] = newUser; _userRooms[newUserName] = new HashSet<string>(_userRooms[name]); if (_userRooms[name].Any()) { foreach (var r in _userRooms[name]) { _rooms[r].Users.Remove(name); _rooms[r].Users.Add(newUserName); Clients[r].changeUserName(oldUser, newUser); } } _userRooms.Remove(name); _users.Remove(name); Caller.hash = newUser.Hash; Caller.name = newUser.Name; Caller.changeUserName(oldUser, newUser); } } else { throw new InvalidOperationException(String.Format("Username '{0}' is already taken!", newUserName)); } return true; } else { EnsureUser(); if (commandName.Equals("rooms", StringComparison.OrdinalIgnoreCase)) { var rooms = _rooms.Select(r => new { Name = r.Key, Count = r.Value.Users.Count }); Caller.showRooms(rooms); return true; } else if (commandName.Equals("join", StringComparison.OrdinalIgnoreCase)) { if (parts.Length == 1) { throw new InvalidOperationException("Join which room?"); } // Only support one room at a time for now string newRoom = parts[1]; ChatRoom chatRoom; // Create the room if it doesn't exist if (!_rooms.TryGetValue(newRoom, out chatRoom)) { chatRoom = new ChatRoom(); _rooms.Add(newRoom, chatRoom); } // Remove the old room if (!String.IsNullOrEmpty(room)) { _userRooms[name].Remove(room); _rooms[room].Users.Remove(name); Clients[room].leave(_users[name]); RemoveFromGroup(room); } _userRooms[name].Add(newRoom); if (!chatRoom.Users.Add(name)) { throw new InvalidOperationException("You're already in that room!"); } Clients[newRoom].addUser(_users[name]); // Set the room on the caller Caller.room = newRoom; AddToGroup(newRoom); Caller.refreshRoom(newRoom); return true; } else if (commandName.Equals("msg", StringComparison.OrdinalIgnoreCase)) { if (_users.Count == 1) { throw new InvalidOperationException("You're the only person in here..."); } if (parts.Length < 2) { throw new InvalidOperationException("Who are you trying send a private message to?"); } string to = parts[1]; if (to.Equals(name, StringComparison.OrdinalIgnoreCase)) { throw new InvalidOperationException("You can't private message yourself!"); } if (!_users.ContainsKey(to)) { throw new InvalidOperationException(String.Format("Couldn't find any user named '{0}'.", to)); } string messageText = String.Join(" ", parts.Skip(2)).Trim(); if (String.IsNullOrEmpty(messageText)) { throw new InvalidOperationException(String.Format("What did you want to say to '{0}'.", to)); } string recipientId = _users[to].ConnectionId; // Send a message to the sender and the sendee Clients[recipientId].sendPrivateMessage(name, to, messageText); Caller.sendPrivateMessage(name, to, messageText); return true; } else { EnsureUserAndRoom(); if (commandName.Equals("me", StringComparison.OrdinalIgnoreCase)) { if (parts.Length == 1) { throw new InvalidProgramException("You what?"); } var content = String.Join(" ", parts.Skip(1)); Clients[room].sendMeMessage(name, content); return true; } else if (commandName.Equals("leave", StringComparison.OrdinalIgnoreCase)) { ChatRoom chatRoom; if (_rooms.TryGetValue(room, out chatRoom)) { chatRoom.Users.Remove(name); _userRooms[name].Remove(room); Clients[room].leave(_users[name]); } RemoveFromGroup(room); Caller.room = null; return true; } throw new InvalidOperationException(String.Format("'{0}' is not a valid command.", parts[0])); } } } return false; }
public static void ToggleDefaultVoice( ChatUser from, Channel channel, string param ) { channel.VoiceRestricted = !channel.VoiceRestricted; }