/// <summary> /// Used to read messages from BTD6 InGameChat Mod. If Message is a ChatMessage, will be converted to a Chat_Message object /// </summary> /// <param name="message"></param> public static Chat_Message ReadChatMessage(this NKMultiGameInterface nkGI, Message message) { if (message.Code != Chat_Message.chatCoopCode) { return(null); } string json = nkGI.ReadMessage <string>(message.bytes); Chat_Message deserialized = Game.instance.GetJsonSerializer().DeserializeJson <Chat_Message>(json); return(deserialized); }
public void Send(int id, string user, string message) { // Call the addNewMessageToPage method to update clients. var m = new Chat_Message().addMessageToRoom(id, user, message); string name = ""; if (m.User.User.ForName != null || m.User.User.SurName != null) { name = m.User.User.ForName + " " + m.User.User.SurName; } else { name = m.User.User.Email; } Clients.Group(id.ToString()).addChatMessage(m.User.User.Email, name, m.User.User.Photo, message); }
public void SendMessage(Chat_Message message) { byte?peerID = GetPeerID(message.Message); if (peerID.HasValue) { message.Message = message.Message.Remove(0, 9); } var json = message.Serialize(); SendMessageToPeers(json, peerID); messageInput.text = ""; UpdateChatLog(message.Message, "Me"); }
private void Chat_Box_KeyDown(object sender, KeyEventArgs e) { //Check if the user hit the "submit" key. if (e.KeyCode != Keys.Enter) { return; } //Do not send empty messages. if (string.IsNullOrWhiteSpace(Chat_Message.Text)) { return; } player?.functions?.Chat(Chat_Message.Text); Chat_Message.Clear(); }
public ActionResult Details(int idr, string Text) { Chat_Room chat_Room = db.Chat_Room.Find(idr); Chat_Users user = chat_Room.Users.Single(s => s.User.Email == User.Identity.Name); Chat_Message message = new Chat_Message() { Text = Text, User = user }; message = db.Chat_Message.Add(message); chat_Room.Messages.Add(message); var date = DateTime.Now; user.LastView = date; chat_Room.LastUpdate = date; db.SaveChanges(); return(View(chat_Room)); }
public async Task ParseMessage(WebSocketReceiveResult Result, byte[] Buffer) { if (!Result.EndOfMessage) { return; } if (Result.MessageType == WebSocketMessageType.Text) { var trimmedString = Encoding.UTF8.GetString(Utilities.TrimBytes(Buffer)); var expando = JsonConvert.DeserializeObject <ExpandoObject>(trimmedString); var jsonMessage = (dynamic)expando; switch ((string)jsonMessage.Type) { case "GetGuestChat": { var displayName = Utilities.GetRandomUserName(); CurrentUser = new User() { Username = User.GetNewUsername(), DisplayName = displayName, AccountType = Utilities.Permanence.Temporary }; CurrentUser.AuthenticationTokens.Add(Guid.NewGuid().ToString()); CurrentChat = new Chat() { ChatID = Chat.GetNewID(), OwnerName = CurrentUser.Username, ChatName = Utilities.GetRandomChatName(), ChatType = Utilities.Permanence.Temporary, IsMemberOnly = false }; CurrentUser.OwnedChats.Add(CurrentChat.ChatID); var request = new { Type = "GetGuestChat", Status = "ok", User = this.CurrentUser, Chat = this.CurrentChat }; await SendJSON(request); CurrentUser.Save(); CurrentChat.Save(); await JoinChat(this.CurrentChat); await SendUserListUpdate(this.CurrentChat); break; } case "TryResumeLogin": { var user = User.Load((string)jsonMessage.Username); if (await AuthenticateUser(user, jsonMessage) == false) { return; } CurrentUser = user; var chatList = GetChatList(); var request = new { Type = "TryResumeLogin", Status = "ok", DisplayName = CurrentUser.DisplayName, AccountType = CurrentUser.AccountType, Chats = chatList, AuthenticationToken = CurrentUser.AuthenticationTokens.Last() }; await SendJSON(request); break; } case "JoinChat": { Chat chat = Chat.Load(jsonMessage.ChatID); var user = User.Load((string)jsonMessage.Username); if (chat == null) { jsonMessage.Status = "not found"; await SendJSON(jsonMessage); return; } if (user == null) { var displayName = Utilities.GetRandomUserName(); CurrentUser = new User() { Username = User.GetNewUsername(), DisplayName = displayName, AccountType = Utilities.Permanence.Temporary }; CurrentUser.AuthenticationTokens.Add(Guid.NewGuid().ToString()); } else { if (await AuthenticateUser(user, jsonMessage) == false) { return; } } if (chat.IsMemberOnly && chat.OwnerName != CurrentUser.Username && !chat.MemberList.Contains(CurrentUser.Username) && !chat.AdminList.Contains(CurrentUser.Username)) { jsonMessage.Status = "unauthorized"; await SendJSON(jsonMessage); return; } CurrentChat = chat; CurrentUser.InvitedChats.Add(chat.ChatID); CurrentUser.Save(); CurrentChat.Save(); var chatList = GetChatList(); var request = new { Type = "JoinChat", Status = "ok", DisplayName = CurrentUser.DisplayName, AccountType = CurrentUser.AccountType, Username = CurrentUser.Username, Chats = chatList, Chat = chat, AuthenticationToken = CurrentUser.AuthenticationTokens.Last() }; await SendJSON(request); await JoinChat(chat); await SendUserListUpdate(chat); SendChatHistory(DateTime.Now); break; } case "ChangeChat": { Chat chat = Chat.Load(jsonMessage.ChatID); if (chat == null) { jsonMessage.Status = "not found"; await SendJSON(jsonMessage); return; } if (chat.IsMemberOnly && chat.OwnerName != CurrentUser.Username && !chat.MemberList.Contains(CurrentUser.Username) && !chat.AdminList.Contains(CurrentUser.Username)) { jsonMessage.Status = "unauthorized"; await SendJSON(jsonMessage); return; } var oldChat = CurrentChat; if (oldChat != null) { await LeaveChat(oldChat); } CurrentChat = chat; jsonMessage.Status = "ok"; jsonMessage.ChatName = chat.ChatName; await SendJSON(jsonMessage); await JoinChat(CurrentChat); if (oldChat != null) { await SendUserListUpdate(oldChat); } await SendUserListUpdate(CurrentChat); SendChatHistory(DateTime.Now); break; } case "NewChat": { if (CurrentUser == null) { return; } var newChat = new Chat() { ChatID = Chat.GetNewID(), ChatName = Utilities.GetRandomChatName(), OwnerName = CurrentUser.Username, ChatType = CurrentUser.AccountType, IsMemberOnly = false }; CurrentUser.OwnedChats.Add(newChat.ChatID); newChat.Save(); CurrentUser.Save(); CurrentChat = newChat; jsonMessage.Status = "ok"; jsonMessage.Chat = newChat; await SendJSON(jsonMessage); break; } case "ChatMessage": { string unencoded = Encoding.UTF8.GetString(Convert.FromBase64String(jsonMessage.Message)); if (unencoded.StartsWith("/")) { await ParseCommand(unencoded); return; } jsonMessage.TimeStamp = DateTime.Now; jsonMessage.DisplayName = CurrentUser.DisplayName; jsonMessage.Username = CurrentUser.Username; await BroadcastMessage(jsonMessage); var di = Directory.CreateDirectory(Path.Combine(Utilities.RootPath, "Data", "Messages")); var strPath = Path.Combine(di.FullName, CurrentChat.ChatID + ".txt"); var cm = new Chat_Message() { Username = CurrentUser.Username, DisplayName = CurrentUser.DisplayName, Message = jsonMessage.Message, TimeStamp = DateTime.Now }; File.AppendAllText(strPath, JsonConvert.SerializeObject(cm) + Environment.NewLine); break; } case "Typing": { await BroadcastMessage(jsonMessage); break; } case "UpdateDisplayName": { if (CurrentUser == null) { return; } if (jsonMessage.DisplayName.Length == 0) { jsonMessage.Status = "blank"; await SendJSON(jsonMessage); return; } if (jsonMessage.DisplayName.Length > 20) { jsonMessage.Status = "too long"; await SendJSON(jsonMessage); return; } CurrentUser.DisplayName = jsonMessage.DisplayName; jsonMessage.Status = "ok"; await SendJSON(jsonMessage); await SendUserListUpdate(CurrentChat); CurrentUser.Save(); break; } case "GetChatInfo": { Chat chat = Chat.Load(jsonMessage.ChatID); if (chat == null) { jsonMessage.Status = "not found"; await SendJSON(jsonMessage); return; } if (chat.OwnerName != CurrentUser.Username && !chat.AdminList.Contains(CurrentUser.Username)) { jsonMessage.Status = "unauthorized"; await SendJSON(jsonMessage); return; } jsonMessage.Status = "ok"; jsonMessage.Chat = chat; await SendJSON(jsonMessage); break; } case "AddMember": { Chat chat = Chat.Load(jsonMessage.ChatID); if (chat == null) { return; } if (chat.OwnerName != CurrentUser.Username && !chat.AdminList.Contains(CurrentUser.Username)) { return; } if (!User.Exists(jsonMessage.Username)) { jsonMessage.Status = "not found"; } else { jsonMessage.Status = "ok"; } await SendJSON(jsonMessage); break; } case "AddAdmin": { Chat chat = Chat.Load(jsonMessage.ChatID); if (chat == null) { return; } if (chat.OwnerName != CurrentUser.Username && !chat.AdminList.Contains(CurrentUser.Username)) { return; } if (!User.Exists(jsonMessage.Username)) { jsonMessage.Status = "not found"; } else { jsonMessage.Status = "ok"; } await SendJSON(jsonMessage); break; } case "SaveChatEdit": { Chat chat = Chat.Load(jsonMessage.ChatID); if (chat == null) { return; } if (chat.OwnerName != CurrentUser.Username && !chat.AdminList.Contains(CurrentUser.Username)) { return; } string chatName = jsonMessage.ChatName; if (chatName.Length > 20) { chatName = chatName.Substring(0, 20); } chat.ChatName = chatName; var members = new List <string>(); foreach (var member in jsonMessage.Members) { members.Add(member.ToString()); } chat.MemberList = members; var admins = new List <string>(); foreach (var admin in jsonMessage.Admins) { admins.Add(admin.ToString()); } chat.AdminList = admins; chat.IsMemberOnly = jsonMessage.MemberOnly; chat.Save(); var request = new { Type = "ChatUpdated", ChatID = chat.ChatID, ChatName = chat.ChatName }; var sockets = AllSockets.FindAll(sock => sock?.CurrentUser?.InvitedChats?.Contains(chat.ChatID) == true || sock?.CurrentUser?.OwnedChats?.Contains(chat.ChatID) == true || sock?.CurrentUser?.Username == chat.OwnerName); foreach (var socket in sockets) { await socket.SendJSON(request); } break; } case "LoginCheckUser": { jsonMessage.Status = User.Exists(jsonMessage.Username); await SendJSON(jsonMessage); break; } case "LoginExistingUser": { if (!User.Exists(jsonMessage.Username)) { return; } var user = User.Load(jsonMessage.Username); if (await AuthenticateUser(user, jsonMessage) == false) { return; } var request = new { Type = "LoginExistingUser", Status = "ok", AuthenticationToken = CurrentUser.AuthenticationTokens.Last(), DisplayName = CurrentUser.DisplayName, AccountType = CurrentUser.AccountType, Username = CurrentUser.Username, Chats = GetChatList() }; await SendJSON(request); break; } case "LoginNewUser": { foreach (var badChar in Path.GetInvalidPathChars()) { if ((jsonMessage.Username as string).Contains(badChar)) { jsonMessage.Status = "invalid"; await SendJSON(jsonMessage); return; } } if (jsonMessage.Username.Length > 20) { return; } if (User.Exists(jsonMessage.Username)) { return; } if (jsonMessage.Password != jsonMessage.Confirm) { return; } var hasher = new PasswordHasher <User>(); CurrentUser = new User() { Username = jsonMessage.Username, DisplayName = Utilities.GetRandomUserName(), AccountType = Utilities.Permanence.Permanent }; CurrentUser.Password = hasher.HashPassword(CurrentUser, jsonMessage.Password); CurrentUser.AuthenticationTokens.Add(Guid.NewGuid().ToString()); CurrentChat = new Chat() { ChatID = Chat.GetNewID(), OwnerName = CurrentUser.Username, ChatName = Utilities.GetRandomChatName(), ChatType = Utilities.Permanence.Permanent, IsMemberOnly = false }; CurrentChat.Save(); CurrentUser.OwnedChats.Add(CurrentChat.ChatID); var request = new { Type = "LoginNewUser", Status = "ok", AuthenticationToken = CurrentUser.AuthenticationTokens.Last(), DisplayName = CurrentUser.DisplayName, Username = CurrentUser.Username, AccountType = CurrentUser.AccountType, Chats = GetChatList() }; CurrentUser.Save(); await SendJSON(request); break; } case "GetChatHistory": { SendChatHistory(jsonMessage.Start.ToLocalTime()); break; } case "DeleteChat": { if (!Chat.Exists(jsonMessage.ChatID)) { return; } Chat chat = Chat.Load(jsonMessage.ChatID); if (chat.OwnerName != CurrentUser.Username && !chat.AdminList.Contains(CurrentUser.Username)) { return; } if (Chat.Delete(jsonMessage.ChatID)) { jsonMessage.Status = "ok"; foreach (var socket in AllSockets.FindAll(sock => sock?.CurrentChat?.ChatID == jsonMessage.ChatID)) { await socket.SendJSON(jsonMessage); } } else { jsonMessage.Status = "failed"; await SendJSON(jsonMessage); } break; } default: { break; } } } else if (Result.MessageType == WebSocketMessageType.Binary) { } else if (Result.MessageType == WebSocketMessageType.Close) { } }
private void SearchChatHistory(DateTime Start, FileStream FS, StreamReader SR, List <Chat_Message> Messages, bool StopAtZero, long StreamPosition) { var seekDate = DateTime.MaxValue; string line = ""; Chat_Message cm = new Chat_Message(); if ((SR.BaseStream.Position > 0 || !StopAtZero) && seekDate > Start) { try { try { line = SR.ReadLine(); cm = JsonConvert.DeserializeObject <Chat_Message>(line); } catch { // If deserialization fails, stream was positioned in mid-line. // It should now be at the start of the next line, and deserialization should work. line = SR.ReadLine(); if (!String.IsNullOrWhiteSpace(line)) { cm = JsonConvert.DeserializeObject <Chat_Message>(line); } else { return; } } seekDate = cm.TimeStamp; if (seekDate < Start) { Messages.Add(cm); while (seekDate < Start & !SR.EndOfStream) { line = SR.ReadLine(); cm = JsonConvert.DeserializeObject <Chat_Message>(line); seekDate = cm.TimeStamp; Messages.Add(cm); } var request = new { Type = "GetChatHistory", Messages = Messages }; #pragma warning disable SendJSON(request); SR.Dispose(); FS.Dispose(); return; #pragma warning restore } } finally { if (SR.BaseStream != null) { SR.BaseStream.Position = Math.Max(0, StreamPosition - 10000); SR.DiscardBufferedData(); SearchChatHistory(Start, FS, SR, Messages, true, SR.BaseStream.Position); } } } else { SR.Dispose(); FS.Dispose(); } }