示例#1
0
        Label getLabelFor(Classes.Image e, ref int y)
        {
            int y_offset = y - gbMessages.VerticalScroll.Value;
            var lbl      = new Label();

            lbl.Tag         = e;
            lbl.Text        = $"{e.UploadedBy.DisplayName} uploaded {e.Name}:";
            lbl.MaximumSize = new Size(gbMessages.Width - 15, 0);
            lbl.AutoSize    = true;
            lbl.Location    = new Point(5, y_offset);
            y += 5;
            return(lbl);
        }
示例#2
0
        void FormStatsLoad(object sender, EventArgs e)
        {
            bitmap = new Classes.Image(pic.Width, pic.Height);

            //loading of values
            Random rnd = new Random();

            for (var i = 0; i < values.Length; i++)
            {
                values[i]     = 0.1f + rnd.Next(24) / 24f;
                aux_values[i] = 0f;
            }

            timer1.Start();
        }
示例#3
0
        private void Client_NewImageUploaded(object sender, Classes.Image e)
        {
            if (CurrentlyUploadingSlices > 0)
            {
                Client_UploadStatus(this, new UploadStatusEvent(e, e.MaximumSlices));
                CurrentlyUploadingSlices = 0;
            }
            CurrentlyUploadingSlices = 0;
            var lbl = getLabelFor(e, ref MESSAGE_Y);

            this.gbMessages.Controls.Add(lbl);
            MESSAGE_Y += lbl.Height;
            var pb = getPictureBoxFor(e, ref MESSAGE_Y);

            this.gbMessages.Controls.Add(pb);
            MESSAGE_Y += pb.Height;
        }
示例#4
0
        private void btnUpload_Click(object sender, EventArgs e)
        {
            if (CurrentlyUploadingSlices > 0 && e != null)
            {
                return;
            }
            var dialog = new OpenFileDialog();

            dialog.InitialDirectory = "C:\\";
            dialog.Title            = "Select Image to Upload";
            dialog.Filter           = "Image files|*.jpg;*.jpeg;*.png;*.gif;*.bmp";
            dialog.CheckFileExists  = true;
            dialog.CheckPathExists  = true;
            dialog.ShowDialog(this);
            if (string.IsNullOrWhiteSpace(dialog.FileName))
            {
                return;
            }
            var path  = System.IO.Path.GetFileName(dialog.FileName);
            var image = new Classes.Image(path, Client.CurrentUser);

            image.Id = _imageInProgressId++;
            if (!Directory.Exists("Images"))
            {
                Directory.CreateDirectory("Images");
            }

            if (!Directory.Exists($"Images/{image.UploadedBy.Id}"))
            {
                Directory.CreateDirectory($"Images/{image.UploadedBy.Id}");
            }

            if (!Directory.Exists($"Images/{image.UploadedBy.Id}/{image.Id}"))
            {
                Directory.CreateDirectory($"Images/{image.UploadedBy.Id}/{image.Id}");
            }

            File.Copy(dialog.FileName, image.Path, true);
            image.LoadImageIntoString();
            CurrentlyUploadingSlices = image.Slices.Count;
            var packet = new Packet(PacketId.RequestUploadImage, image.ToJson(true));

            Client.Send(packet.ToString());
            Common.AddImage(image);
        }
示例#5
0
        PictureBox getPictureBoxFor(Classes.Image image, ref int y)
        {
            int y_offset    = y - gbMessages.VerticalScroll.Value;
            var pb          = new PictureBox();
            var loadedImage = System.Drawing.Image.FromStream(image.GetStream());

            pb.Image       = loadedImage;
            pb.Location    = new Point(5, y_offset);
            pb.Tag         = image;
            pb.MaximumSize = new Size(gbMessages.Size.Width - 50, 0);
            pb.Size        = new Size(
                Math.Min(gbMessages.Size.Width - 50, loadedImage.Width),
                Math.Min(gbMessages.Size.Width - 50, loadedImage.Height) // maximum square
                );
            pb.SizeMode  = PictureBoxSizeMode.Zoom;
            pb.BackColor = Color.Gray;
            y           += 5;
            return(pb);
        }
        public FormStatsOrigin(int[] val)
        {
            values = val;

            for (var i = 0; i < 24; i++)
            {
                createText("120", 300, 300);
            }

            InitializeComponent();

            bitmap = new Classes.Image(pic.Width, pic.Height);

            //loading of values

            Random rnd = new Random();

            for (var i = 0; i < values.Length; i++)
            {
                values[i] = rnd.Next(50);
            }

            //get max value

            for (int i = 0; i < values.Length; i++)
            {
                if (values[i] > max_value)
                {
                    max_value = values[i];
                }
            }

            //drawing of graphs

            int w = 26;

            if (max_value > 0)
            {
                bitmap.clear();

                for (int i = 0; i < 24; i++)
                {
                    float v = (float)(values[i] / max_value);

                    if (v < 0.162f && v != 0f)
                    {
                        v = 0.162f;
                    }

                    bitmap.graph(w * i, 150, v, 22, 130, 0);

                    int offx = 0;

                    texts[i].Text = "" + values[i];

                    if (values[i] < 10)
                    {
                        offx = 4;
                    }

                    texts[i].Location = new System.Drawing.Point(pic.Location.X + offx + w * i, (int)(pic.Location.Y + 125 - ((float)(values[i] / max_value) * 130)));

                    if (texts[i].Location.Y > pic.Location.Y + 130 - 25)
                    {
                        texts[i].Location = new System.Drawing.Point(pic.Location.X + offx + w * i, pic.Location.Y + 130 - 25);
                    }
                }

                pic.Image = bitmap.getBitmap();
            }
        }
        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);
            }
        }
        public FormStatsQuantity(int[] val, int month, int year)
        {
            values = val;

            for (int i = 0; i < values.Length; i++)
            {
                createText((i + 1) + "/" + month, 4 + i * 40, 205);
            }

            for (var i = 0; i < values.Length; i++)
            {
                createText2("120", 300, 300);
            }

            InitializeComponent();

            for (int i = 0; i < texts.Count; i++)
            {
                panel1.Controls.Add(texts[i]);
                panel1.Controls.Add(texts2[i]);

                texts[i].BringToFront();
                texts2[i].BringToFront();
            }

            bitmap = new Classes.Image(pic.Width, pic.Height);

            //loading of values
            var guests = DBConn.getTotalGuests("where ingreso >= '" + year + "-" + month + "-1' and ingreso <= '" + year + "-" + month + values.Length + "'")

                         /*from g in DBConn.getGuests()
                          * where g.ingreso > DateTime.Parse("30/9/2018") && g.ingreso < DateTime.Parse("1/11/2018")
                          * select g*/;

            guests.ForEach(x => Console.WriteLine(x.ingreso.ToShortDateString()));

            for (int i = 0; i < values.Length; i++)
            {
                var s = (i + 1).ToString() + "/" + month + "/" + year;
                values[i] = guests.FindAll(x => x.ingreso.Date == DateTime.Parse(s)).Count;
            }

            //get of max value

            for (int i = 0; i < values.Length; i++)
            {
                if (values[i] > max_value)
                {
                    max_value = values[i];
                }
            }

            for (int i = 0; i < values.Length; i++)
            {
                bitmap.graph(i * 40, 200, values[i] / ((max_value == 0) ? 1 : max_value), 36, 170, 0);

                int offx = 5;
                if (values[i] < 10)
                {
                    offx = 10;
                }

                texts2[i].Location = new System.Drawing.Point(pic.Location.X + offx + 40 * i, (int)(pic.Location.Y + 175 - ((float)(values[i] / ((max_value == 0) ? 1 : max_value)) * 170)));
                texts2[i].Text     = "" + values[i];
            }

            pic.Image = bitmap.getBitmap();
        }
示例#9
0
        void parseJson(object sender, string json)
        {
            Logger.LogMsg("Recieved: " + json);
            var packet = new Packet(json);

            if (packet.Id == PacketId.NewMessage)
            {
                var msg = new Message();
                msg.FromJson(packet.Information);

                Form.Invoke(new Action(() =>
                {
                    NewMessage?.Invoke(this, msg);
                }));
            }
            else if (packet.Id == PacketId.GiveIdentity)
            {
                var usr = new User();
                usr.FromJson(packet.Information);
                this.CurrentUser = usr;

                Form.Invoke(new Action(() =>
                {
                    IdentityKnown?.Invoke(this, usr);
                }));
            }
            else if (packet.Id == PacketId.UserUpdate)
            {
                var usr = new User();
                usr.FromJson(packet.Information);
                Form.Invoke(new Action(() =>
                {
                    UserUpdate?.Invoke(this, usr);
                }));
            }
            else if (packet.Id == PacketId.UserLeft)
            {
                var usr = new User();
                usr.FromJson(packet.Information);
                Form.Invoke(new Action(() =>
                {
                    UserDisconnected?.Invoke(this, usr);
                }));
            }
            else if (packet.Id == PacketId.SetMonitorState)
            {
                var state = packet.Information["state"].ToObject <bool>();
                Form.Invoke(new Action(() =>
                {
                    SetMonitorState?.Invoke(this, state);
                }));
            }
            else if (packet.Id == PacketId.Disconnect)
            {
                this.Close();
            }
            else if (packet.Id == PacketId.MessageDeleted)
            {
                var id = packet.Information["id"].ToObject <uint>();
                Form.Invoke(new Action(() =>
                {
                    MessageDeleted?.Invoke(this, id);
                }));
            }
            else if (packet.Id == PacketId.ImageNeedSlice)
            { // Server needs us to send the slice.
                var id        = packet.Information["id"].ToObject <uint>();
                var shiftedId = (uint)0;
                if (packet.Information.TryGetValue("originalId", out var val))
                {
                    shiftedId = id;
                    id        = val.ToObject <uint>();
                }
                var sliceNum = packet.Information["slice"].ToObject <int>();
                if (Common.Images.TryGetValue(id, out var image))
                {
                    if (shiftedId > 0)
                    { // move it into the new location, remove old one.
                        Common.Images[shiftedId] = 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);
                    Send(pongPacket.ToString());
                    Form.Invoke(new Action(() =>
                    {
                        UploadStatus?.Invoke(this, new UploadStatusEvent(image, sliceNum));
                    }));
                }
            }
            else if (packet.Id == PacketId.ImageInitialInformation)
            {
                var image = new Classes.Image();
                image.FromJson(packet.Information);
                if (Common.TryGetImage(image.Id, out var existingImage))
                {
                    if (existingImage.Slices.Count == image.MaximumSlices)
                    { // We already have this image, so we dont need to download it
                        Form.Invoke(new Action(() =>
                        {
                            NewImageUploaded?.Invoke(this, existingImage);
                        }));
                        return;
                    }
                }
                Common.AddImage(image);
                var jobj = new JObject();
                jobj["id"]    = image.Id;
                jobj["slice"] = 0;
                var response = new Packet(PacketId.ImageNeedSlice, jobj);
                Send(response.ToString());
            }
            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)
                    {
                        Form.Invoke(new Action(() =>
                        {
                            NewImageUploaded?.Invoke(this, image);
                        }));
                    }
                    else
                    {
                        var jobj = new JObject();
                        jobj["id"]    = image.Id;
                        jobj["slice"] = sliceNum + 1;
                        var pongPacket = new Packet(PacketId.ImageNeedSlice, jobj);
                        Send(pongPacket.ToString());
                        Form.Invoke(new Action(() =>
                        {
                            Form.pbProgressBar.Maximum = image.MaximumSlices;
                            Form.pbProgressBar.Value   = sliceNum;
                            Form.pbProgressBar.Tag     = $"Downloading image '{image.Name}'; {sliceNum}/{image.MaximumSlices} {((int)(sliceNum + 1 / image.MaximumSlices + 1))}";
                        }));
                    }
                }
            }
        }