Beispiel #1
0
        private void btnSend_Click(object sender, EventArgs e)
        {
            try
            {
                Classes.Message message = new Classes.Message
                {
                    To      = txtTo.Text,
                    From    = username,
                    Date    = DateTime.Now.ToString(),
                    Subject = txtSubject.Text,
                    Content = txtMessage.Text
                };


                if (User.SendMessage(message))
                {
                    MessageBox.Show("Message sent successfully.", "Message", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                }
            }
            catch (NullReferenceException err)
            {
                MessageBox.Show(err.Message + "\n" + err.ToString());
            }
        }
        private void ServerForm_Load(object sender, EventArgs e)
        {
            this.Text = Program.GetIPAddress();
            gbMessages.BringToFront();
            var token = Program.GetRegistry("apiKey", "");

            if (string.IsNullOrWhiteSpace(token))
            {
                var msg = new Classes.Message();
                msg.Author  = SERVERUSER;
                msg.Colour  = Color.Blue;
                msg.Content = $"You need to enter the server's API token. Use /token [value]";
                Server_NewMessage(this, msg);
            }
            else
            {
                var th = new System.Threading.Thread(() => doSetIPOnBot(token));
                th.Start();
                var msg = new Classes.Message();
                msg.Author  = SERVERUSER;
                msg.Colour  = Color.Blue;
                msg.Content = $"Attempting to set IP as {Program.GetIPAddress()} with '{token}'";
                Server_NewMessage(this, msg);
            }
        }
        private Task HandleConnDisconnect(Connection connection, Exception error)
        {
            if (uint.TryParse(connection.Reference, out var id))
            {
                if (Common.Users.TryGetValue(id, out var user))
                {
                    Connections.Remove(id);
                    // Dont remove from users, since that might be helpful to keep
                    Logger.LogMsg($"Disconnect on {id} {user.UserName}");
                    Form.Invoke(new Action(() => {
                        var msg     = new Classes.Message();
                        msg.Content = $"{user.DisplayName} ({user.Id}) has disconnected";
                        msg.Colour  = System.Drawing.Color.Red;
                        msg.Author  = Form.SERVERUSER;
                        msg.Id      = Common.IterateMessageId();
                        NewMessage?.Invoke(this, msg);
                        var packet = new Packet(PacketId.NewMessage, msg.ToJson());
                        Broadcast(packet);

                        var leftPacket = new Packet(PacketId.UserLeft, user.ToJson());
                        Broadcast(leftPacket);
                    }));
                    return(Task.CompletedTask);
                }
            }
            Logger.LogMsg($"Disconnect on {id}, no user available.");
            return(Task.CompletedTask);
        }
Beispiel #4
0
        private void StickerAdapterOnOnItemClick(object sender, AdapterClickEvents adapterClickEvents)
        {
            try
            {
                var StcikerUrl = StickerAdapter.GetItem(adapterClickEvents.Position);

                var unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;

                Classes.Message m1 = new Classes.Message
                {
                    M_id      = unixTimestamp.ToString(),
                    from_id   = UserDetails.User_id,
                    to_id     = ChatWindow_Activity.Userid,
                    media     = StcikerUrl,
                    time_text = TimeNow,
                    position  = "right",
                    type      = "right_sticker"
                };

                ChatWindow_Activity.MAdapter.Add(m1);

                if (IMethods.CheckConnectivity())
                {
                    //Sticker Send Function
                    MessageController.SendMessageTask(ChatWindow_Activity.Userid, unixTimestamp.ToString(), "", "", "", StcikerUrl, "sticker" + adapterClickEvents.Position).ConfigureAwait(false);
                }
                else
                {
                    Toast.MakeText(this.Context, this.GetText(Resource.String.Lbl_Error_check_internet_connection),
                                   ToastLength.Short).Show();
                }

                try
                {
                    var ChatWindow = ((ChatWindow_Activity)Activity);

                    var interplator = new FastOutSlowInInterpolator();
                    ChatWindow.ChatStickerButton.Tag = "Closed";

                    ChatWindow.ResetButtonTags();
                    ChatWindow.ChatStickerButton.Drawable.SetTint(Android.Graphics.Color.ParseColor("#888888"));
                    ChatWindow.TopFragmentHolder.Animate().SetInterpolator(interplator).TranslationY(1200)
                    .SetDuration(300);
                    ChatWindow.SupportFragmentManager.BeginTransaction().Remove(ChatWindow.Chat_StickersTab_BoxFragment)
                    .Commit();
                }
                catch (Exception exception)
                {
                    Console.WriteLine(exception);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
 private void lvMessages_SelectedIndexChanged(object sender, EventArgs e)
 {
     try
     {
         Classes.Message message = User.GetMessage(lvMessages.SelectedItems[0].SubItems[0].Text);
         ViewMessage     vm      = new ViewMessage(claimManager, message.From, message.Subject, message.Date, message.Content);
         vm.ShowDialog();
     }
     catch (Exception ex)
     {
     }
 }
 private void txtReply_KeyDown(object sender, KeyEventArgs e)
 {
     if (e.KeyCode == Keys.Enter && !string.IsNullOrWhiteSpace(txtReply.Text))
     {
         var msg = new Classes.Message();
         msg.Author  = Client.Client.CurrentUser;
         msg.Content = txtReply.Text;
         var packet = new Classes.Packet(Classes.PacketId.SendMessage, msg.ToJson());
         Client.Client.Send(packet.ToString());
         this.Hide(); // since we replied.
     }
 }
        Label getLabelFor(Classes.Message message, ref int y)
        {
            int y_offset = y - gbMessages.VerticalScroll.Value;
            var lbl      = new Label();

            lbl.Text        = $"{message.Author.UserName}: {message.Content}";
            lbl.Tag         = message;
            lbl.AutoSize    = true;
            lbl.MaximumSize = new Size(gbMessages.Size.Width - 15, 0);
            lbl.Location    = new Point(5, y_offset);
            y += 5;
            return(lbl);
        }
        public void Show(Classes.Message message)
        {
            REMAINING       = 30;
            STARTED         = 0;
            MESSAGE_ID      = message.Id;
            lblFrom.Text    = $"From {message.Author.DisplayName}";
            lblMessage.Text = message.Content;
            txtReply.Text   = "";
            timeoutTimer.Start();
            var loc = OpenLocation;

            this.SetDesktopLocation(loc.X, loc.Y);
            this.Show();
            this.TopMost = true;
            this.BringToFront();
        }
 private void txtMessage_KeyDown(object sender, KeyEventArgs e)
 {
     if (e.KeyCode == Keys.Enter)
     {
         e.SuppressKeyPress = true;
         e.Handled          = true;
         if (string.IsNullOrWhiteSpace(txtMessage.Text))
         {
             return;
         }
         var msg = new Classes.Message()
         {
             Author = Client.CurrentUser, Content = txtMessage.Text
         };
         txtMessage.Text = "";
         var pcket = new Packet(PacketId.SendMessage, msg.ToJson());
         Client.Send(pcket.ToString());
     }
 }
 private void txtMessage_KeyDown(object sender, KeyEventArgs e)
 {
     if (e.KeyCode == Keys.Enter)
     {
         var msg = new Classes.Message()
         {
             Author = SERVERUSER, Content = txtMessage.Text
         };
         msg.Id = Common.IterateMessageId();
         Server._internalServerMessage(msg);
         if (txtMessage.Text.StartsWith("/"))
         {
             Commands.Execute(msg);
         }
         else
         {
             Server.Broadcast(new Packet(PacketId.NewMessage, msg.ToJson()));
         }
         txtMessage.Text = "";
     }
 }
        Label getLabelFor(Classes.Message message, ref int y)
        {
            int y_offset = y - gbMessages.VerticalScroll.Value;
            var lbl      = new FormatLabel(message, gbMessages);

            lbl.Text            = $"{message.Author.DisplayName}: {message.Content}";
            lbl.Tag             = message;
            lbl.AutoSize        = true;
            lbl.MaximumSize     = new Size(gbMessages.Size.Width - 45, 0);
            lbl.Location        = new Point(5, y_offset);
            lbl.ContextMenu     = new ContextMenu();
            lbl.ContextMenu.Tag = message;
            lbl.ContextMenu.MenuItems.Add($"Id: {message.Id}", putTextToClipboard);
            lbl.ContextMenu.MenuItems.Add($"Author: {message.Author.UserName} ({message.Author.Id})", putTextToClipboard);
            if (message.Id > 0)
            {
                lbl.ContextMenu.MenuItems.Add($"[Delete]", deleteMessage);
                lbl.ContextMenu.MenuItems.Add($"[Edit]", editMessage);
            }
            y += 5;
            return(lbl);
        }
        void doSetIPOnBot(string token)
        {
            var msg = new Classes.Message();

            msg.Author  = SERVERUSER;
            msg.Colour  = Color.Blue;
            msg.Content = "Internal error occured when performing api POST.";
            try
            {
                msg.Content = MLHandler.SendServerStart("Chat Server");
                if (msg.Content.StartsWith("Error:") == false)
                {
                    masterlistTimer.Enabled  = true;
                    masterlistTimer.Interval = 1000;// * 60 * 5;
                    masterlistTimer.Start();
                }
            } catch (Exception ex)
            {
                msg.Content = ex.Message;
            }
            Server_NewMessage(this, msg);
        }
        private void Client_NewMessage(object sender, Classes.Message e)
        {
            Label lbl;

            lock (MessageLabels)
            {
                lbl        = getLabelFor(e, ref MESSAGE_Y);
                lbl.Click += Lbl_Click;
                if (e.Id > 0)
                {
                    MessageLabels[e.Id] = lbl;
                }
            }
            lbl.ForeColor = e.Colour;
            int height = lbl.Height;

            if (Form.ActiveForm == this)
            {
                LAST_SEEN_MESSAGE = e.Id;
            }
            else
            {
                lbl.BackColor = Color.LightCoral;
                if (e.Author.Id != Client.CurrentUser.Id)
                {
                    notificationForm = notificationForm ?? new NotificationForm(this);
                    notificationForm.Show(e);
                }
            }
            this.gbMessages.Controls.Add(lbl);
            height     = lbl.Height;
            MESSAGE_Y += height;
            gbMessages.HorizontalScroll.Enabled = false;
            if (!UserHasSetScroll)
            {
                gbMessages.ScrollControlIntoView(lbl);
            }
        }
        private void Server_NewUser(object sender, User e)
        {
            gbUsers.Controls.Clear();
            var users = Common.Users.OrderBy(x => x.Key);
            int y     = 15;

            foreach (var user in users)
            {
                var lbl = createLabelFor(user.Value, ref y);
                lbl.TextAlign = ContentAlignment.TopCenter;
                gbUsers.Controls.Add(lbl);
                lbl.Click += user_click;
            }

            var msg = new Classes.Message();

            msg.Author  = SERVERUSER;
            msg.Id      = Common.IterateMessageId();
            msg.Content = $"{e.UserName} ({e.Id}) has connected";
            msg.Colour  = Color.Red;
            Server.Broadcast(new Packet(PacketId.NewMessage, msg.ToJson()));
            Server_NewMessage(this, msg);
        }
        private void Server_NewMessage(object sender, Classes.Message e)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new Action(() => { Server_NewMessage(sender, e); }));
                return;
            }
            var lbl    = getLabelFor(e, ref MESSAGE_Y);
            int height = lbl.Height;

            if (e.Content.StartsWith("/") && e.Colour == Color.Black)
            {
                lbl.ForeColor = Color.Coral;
            }
            else
            {
                lbl.ForeColor = e.Colour;
            }
            lbl.Click += msg_click;
            gbMessages.Controls.Add(lbl);
            height     = lbl.Height;
            MESSAGE_Y += height;
        }
Beispiel #16
0
 public FormatLabel(Classes.Message message, Panel container) : base()
 {
     ParentPanel = container;
     Message     = message;
 }
Beispiel #17
0
        public void ActivateControl(bool withPhoto)
        {
            //hMemberId.Value = this.MemberId;
            //hTopicId.Value = this.TopicId;
            try
            {
                if (withPhoto)
                {
                    mv.ActiveViewIndex = 0;
                    iPhoto.ImageUrl    = "~/Photos/" + this.Photo;
                    //iPhoto.Attributes.Add("MemberId", this.MemberId);
                    //iPhoto.Attributes.Add("TopicId", this.TopicId);

                    if (FirstName != null)
                    {
                        lMP.Text    = FirstName;
                        iMP.ToolTip = FirstName;

                        switch (this.Gender)
                        {
                        case 1:
                            iMP.ImageUrl = "~/Images/user_male_olive_blue_black.png";
                            iMP.Attributes.Add("MemberId", this.MemberId.ToString());
                            divMP.Attributes.Add("class", "mProfileContainer mProfileMale");
                            break;

                        case 2:
                            iMP.ImageUrl = "~/Images/user_female_white_pink_ginger.png";
                            iMP.Attributes.Add("MemberId", this.MemberId.ToString());
                            divMP.Attributes.Add("class", "mProfileContainer mProfileFemale");
                            break;

                        default:
                            divMP.Attributes.Add("class", "mProfileContainer mProfileAvailable");
                            iMP.ImageUrl = "~/Images/user.png";
                            break;
                        }

                        // Retrieve the Messages this Member posted for this Topic
                        EZDiscuss.Classes.Message msg = new Classes.Message();
                        DataTable dt = new DataTable();
                        dt = msg.MessageRetrieveByMemberIdAndTopicId(MemberId, TopicId);
                        if (dt.Rows.Count > 0)
                        {
                            string msgTitle = string.Empty;
                            // Loop through the datatable and create a tooltip
                            StringBuilder sb = new StringBuilder();
                            if (dt.Rows.Count == 1)
                            {
                                sb.Append(FirstName + "'s comment on this Topic: \n\n");
                                msgTitle = "Comment";
                            }
                            else
                            {
                                sb.Append(FirstName + "'s comments on this Topic: \n\n");
                                msgTitle = "Comments";
                            }

                            string dateTitle = "Date";

                            sb.Append(dateTitle + "\t\t\t" + " " + msgTitle + "\n");
                            foreach (DataRow dr in dt.AsEnumerable())
                            {
                                string msgDate = dr["DateCreated"].ToString();
                                string message = dr["Message"].ToString();
                                sb.Append(msgDate + "  " + message + "\n");
                            }

                            iPhoto.ToolTip = sb.ToString();
                        }
                    }
                    else
                    {
                        iMP.ToolTip = "";
                        lMP.Text    = "available";
                        divMP.Attributes.Add("class", "mProfileContainer mProfileAvailable");
                        iMP.ImageUrl = "~/Images/user.png";
                    }
                }
                else
                {
                    mv.ActiveViewIndex = 1;

                    if (FirstName != null)
                    {
                        lMP.Text = FirstName;

                        switch (this.Gender)
                        {
                        case 1:
                            iMP.ImageUrl = "~/Images/user_male_olive_blue_black.png";
                            iMP.Attributes.Add("MemberId", this.MemberId.ToString());
                            divMP.Attributes.Add("class", "mProfileContainer mProfileMale");
                            break;

                        case 2:
                            iMP.ImageUrl = "~/Images/user_female_white_pink_ginger.png";
                            iMP.Attributes.Add("MemberId", this.MemberId.ToString());
                            divMP.Attributes.Add("class", "mProfileContainer mProfileFemale");
                            break;

                        default:
                            divMP.Attributes.Add("class", "mProfileContainer mProfileAvailable");
                            iMP.ImageUrl = "~/Images/user.png";
                            break;
                        }
                    }
                    else
                    {
                        lMP.Text = "available";
                        divMP.Attributes.Add("class", "mProfileContainer mProfileAvailable");
                        iMP.ImageUrl = "~/Images/user.png";
                    }
                }
            }
            catch (Exception ex)
            {
                EZDiscuss.Classes.Helper.LogError("ucMemberProfile.ascx.cs", "ActivateControl", ex.Message, this.MemberId);
            }
        }
        private void HandleConnMessage(Connection connection, User user, Packet packet)
        {
            if (packet.Id == PacketId.SendMessage)
            {
                var msg = new Message();
                msg.FromJson(packet.Information);
                if (msg.Content.Length > 256)
                {
                    msg         = new Message();
                    msg.Content = $"Error: Message was too long";
                    msg.Author  = Menu.Server.SERVERUSER;
                    msg.Colour  = System.Drawing.Color.Red;
                    SendTo(user, new Packet(PacketId.NewMessage, msg.ToJson()));
                    return;
                }
                if (string.IsNullOrWhiteSpace(msg.Content))
                {
                    msg         = new Message();
                    msg.Content = $"Error: Message was empty, whitespace or null.";
                    msg.Author  = Menu.Server.SERVERUSER;
                    msg.Colour  = System.Drawing.Color.Red;
                    SendTo(user, new Packet(PacketId.NewMessage, msg.ToJson()));
                    return;
                }
                if (user.SavedValues.TryGetValue("muted", out var val) && bool.TryParse(val, out var muted) && muted)
                {
                    msg         = new Message();
                    msg.Content = $"Error: you are muted";
                    msg.Author  = Menu.Server.SERVERUSER;
                    msg.Colour  = System.Drawing.Color.Red;
                    SendTo(user, new Packet(PacketId.NewMessage, msg.ToJson()));
                    return;
                }


                msg.Id = Common.IterateMessageId();
                Common.AddMessage(msg);
                NewMessage?.Invoke(this, msg); // so Server can see all messages
                if (msg.Content.StartsWith("/"))
                {                              // command, so we dont broadcast to all users
                    try
                    {
                        Menu.Server.Commands.Execute(msg);
                    } catch (Exception ex)
                    {
                        Logger.LogMsg(ex.ToString(), LogSeverity.Error);
                        var reply = new Classes.Message();
                        reply.Author = Menu.Server.SERVERUSER;
                        reply.Id     = Common.IterateMessageId();
                        reply.Colour = System.Drawing.Color.Red;
                        SendTo(user, new Packet(PacketId.NewMessage, reply.ToJson()));
                    }
                }
                else
                { // non-command, so we broadcast
                    var pong = new Packet(PacketId.NewMessage, msg.ToJson());
                    Broadcast(pong);
                }
            }
            else if (packet.Id == PacketId.Disconnect)
            {
                HandleConnDisconnect(connection, new Exception("User self-disconnected"));
            }
            else if (packet.Id == PacketId.RequestDeleteMessage)
            {
                var id = packet.Information["id"].ToObject <uint>();
                if (Common.TryGetMessage(id, out var msg))
                {
                    if (msg.Author.Id != user.Id && user.Id != Menu.Server.SERVERUSER.Id)
                    {
                        var errMsg = new Message();
                        errMsg.Author  = Menu.Server.SERVERUSER;
                        errMsg.Id      = 0;
                        errMsg.Content = $"Error: Cannot delete message since you are not the author";
                        errMsg.Colour  = Color.Red;
                        SendTo(user, new Packet(PacketId.NewMessage, errMsg.ToJson()));
                        return;
                    }
                    var jobj = new JObject();
                    jobj["id"] = id;
                    var pong = new Packet(PacketId.MessageDeleted, jobj);
                    Broadcast(pong);
                }
            }
            else if (packet.Id == PacketId.RequestEditMessage)
            {
            }
            else if (packet.Id == PacketId.RequestUploadImage)
            {
                var image = new Classes.Image();
                image.FromJson(packet.Information);
                if ((Menu.Client?.Client?.CurrentUser?.Id ?? (uint)0) == user.Id)
                { // Local user, so no need to upload image (since its already there)
                    if (Common.TryGetImage(image.Id, out var old))
                    {
                        Common.Images.Remove(image.Id);
                        old.Id = Common.IterateImageId();
                        Common.AddImage(old);
                        image = old;
                    }
                    var otherPacket = new Packet(PacketId.ImageInitialInformation, image.ToJson(true));
                    Broadcast(otherPacket);
                    return;
                }
                var jobj = new JObject();
                jobj["slice"]      = 0;
                jobj["originalId"] = image.Id;
                image.Id           = Common.IterateImageId();
                Common.AddImage(image);
                jobj["id"] = image.Id;
                var pongPacket = new Packet(PacketId.ImageNeedSlice, jobj);
                SendTo(user, pongPacket);
            }
            else if (packet.Id == PacketId.ImageSlice)
            {
                var id       = packet.Information["id"].ToObject <uint>();
                var sliceNum = packet.Information["slice"].ToObject <int>();
                var done     = packet.Information["done"].ToObject <bool>();
                var content  = packet.Information["data"].ToObject <string>();
                if (Common.TryGetImage(id, out var image))
                {
                    image.SetSlice(sliceNum, content);
                    if (done)
                    {
                        var      loadedImage = System.Drawing.Image.FromStream(image.GetStream());
                        string[] pathDirs    = image.Path.Split('/');
                        pathDirs = pathDirs.Reverse().Skip(1).Reverse().ToArray();
                        string temp = "";
                        foreach (var path in pathDirs)
                        {
                            temp += path + "/";
                            if (!Directory.Exists(temp))
                            {
                                Directory.CreateDirectory(temp);
                            }
                        }
                        loadedImage.Save(image.Path);
                        var otherPacket = new Packet(PacketId.ImageInitialInformation, image.ToJson(true));
                        Broadcast(otherPacket);
                    }
                    else
                    {
                        var jobj = new JObject();
                        jobj["id"]    = image.Id;
                        jobj["slice"] = sliceNum + 1;
                        var pongPacket = new Packet(PacketId.ImageNeedSlice, jobj);
                        SendTo(user, pongPacket);
                    }
                }
            }
            else if (packet.Id == PacketId.ImageNeedSlice)
            {
                var id       = packet.Information["id"].ToObject <uint>();
                var sliceNum = packet.Information["slice"].ToObject <int>();
                if (Common.TryGetImage(id, out var image))
                {
                    var slice = image.Slices[sliceNum];
                    var jobj  = new JObject(packet.Information);
                    jobj["done"] = (sliceNum == image.Slices.Count - 1);
                    jobj["data"] = slice;
                    var pongPacket = new Packet(PacketId.ImageSlice, jobj);
                    SendTo(user, pongPacket);
                }
            }
            else if (packet.Id == PacketId.NeedUserInfo)
            {
                var id   = packet.Information["id"].ToObject <uint>();
                var usr  = Common.GetUser(id);
                var pong = new Packet(PacketId.RespondUserInfo, usr.ToJson());
                SendTo(user, pong);
            }
        }