/// <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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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");
        }
Exemplo n.º 4
0
        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();
        }
Exemplo n.º 5
0
        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();
            }
        }