Example #1
0
        public void ClientSendMessageToServer(string ip, int port, string expected)
        {
            // arrange
            var messageArchive = new MessageArchive();
            var server         = new SocketServer(ip, port);
            var client         = new SocketClient(ip, port);

            server.SubscribeToReceivingMessage(delegate(TcpClient client, string message)
            {
                messageArchive.AddToRchive(client, message);
            });

            //act
            var threadServer = new Thread(client.StartChat);

            threadServer.Start();
            var threadClient = new Thread(client.StartChat);

            threadClient.Start();

            client.SendMessage(expected);
            var actual = messageArchive.Archive.First().Value.First();

            //assert
            Assert.Equal(expected, actual);
        }
Example #2
0
        public ActionResult DeleteConfirmed(long id)
        {
            MessageArchive messagearchive = db.MessageArchives.Find(id);

            db.MessageArchives.Remove(messagearchive);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Example #3
0
        //
        // GET: /MessageArchive/Details/5

        public ActionResult Details(long id = 0)
        {
            MessageArchive messagearchive = db.MessageArchives.Find(id);

            if (messagearchive == null)
            {
                return(HttpNotFound());
            }
            return(View(messagearchive));
        }
Example #4
0
        public ActionResult Create(long arcid = 0)
        {
            ViewBag.Devices = new SelectList(db.Devices, "ID", "DeviceCode");

            if (arcid == 0)
            {
                Message message = new Message()
                {
                    MessageType = 1,
                    Status      = 1,
                    ValidFrom   = new DateTime(DateTime.Now.Year, 1, 1),
                    ValidTo     = new DateTime(DateTime.Now.Year + 1, 12, 31)
                };

                return(View(message));
            }
            else
            {
                Message        msg = null;
                MessageArchive arc = db.MessageArchives.Find(arcid);
                if (arc != null)
                {
                    msg = new Message()
                    {
                        DeviceID       = arc.DeviceID,
                        ExtDate1       = arc.ExtDate1,
                        ExtDate2       = arc.ExtDate2,
                        ExtDate3       = arc.ExtDate3,
                        ExtString1     = arc.ExtString1,
                        ExtString2     = arc.ExtString2,
                        ExtString3     = arc.ExtString3,
                        ExtDec1        = arc.ExtDec1,
                        ExtDec2        = arc.ExtDec2,
                        ExtDec3        = arc.ExtDec3,
                        MessageContent = arc.MessageContent,
                        MessageType    = arc.MessageType,
                        Remarks        = arc.Remarks,
                        Status         = arc.Status,
                        ValidFrom      = arc.ValidFrom,
                        ValidTo        = arc.ValidTo
                    };
                }
                return(View(msg));
            }
        }
Example #5
0
        //
        // GET: /Message/G/5

        public string G(string id, string p, string r)
        {
            Request request = new Models.Request();
            //List<RequestMessage> reqMessages = new List<RequestMessage>();
            DateTime      now           = DateTime.Now;
            List <string> parts         = new List <string>();
            string        content       = null;
            long          foundDeviceID = 0;
            Device        device        = null;

            long requestIndex;

            if (string.IsNullOrEmpty(r) == false && long.TryParse(r, out requestIndex))
            {
                request.RequestIndex = requestIndex;
            }

            if (string.IsNullOrEmpty(id) == false && string.IsNullOrEmpty(p) == false)
            {
                device = db.Devices.FirstOrDefault(d => d.DeviceCode == id && d.PassCode == p);
                if (device != null)
                {
                    foundDeviceID = device.ID;

                    List <Message> messages = db.Messages.Where(m => m.DeviceID == device.ID && m.Status == 1 && m.ValidFrom <= now && m.ValidTo >= now && (m.RequestIndex.HasValue == false || (request.RequestIndex.HasValue && request.RequestIndex.Value >= (m.RequestIndex.Value - (m.RequestIndexRange.HasValue? m.RequestIndexRange.Value : 5)) && request.RequestIndex.Value <= (m.RequestIndex.Value + (m.RequestIndexRange.HasValue? m.RequestIndexRange.Value : 5))))).ToList();
                    request.RequestMessages = new List <RequestMessage>(messages.Count);
                    foreach (Message message in messages)
                    {
                        parts.Add(message.MessageContent);

                        request.RequestMessages.Add(new RequestMessage()
                        {
                            MessageID      = message.ID,
                            MessageContent = message.MessageContent
                        });

                        if (message.MessageType == 1) // one-time only
                        {
                            // move to archive
                            MessageArchive archive = new MessageArchive()
                            {
                                DeviceID       = message.DeviceID,
                                ExtDate1       = message.ExtDate1,
                                ExtDate2       = message.ExtDate2,
                                ExtDate3       = message.ExtDate3,
                                ExtDec1        = message.ExtDec1,
                                ExtDec2        = message.ExtDec2,
                                ExtDec3        = message.ExtDec3,
                                ExtString1     = message.ExtString1,
                                ExtString2     = message.ExtString2,
                                ExtString3     = message.ExtString3,
                                MessageContent = message.MessageContent,
                                MessageID      = message.ID,
                                MessageType    = message.MessageType,
                                Remarks        = message.Remarks,
                                Status         = message.Status,
                                ValidFrom      = message.ValidFrom,
                                ValidTo        = message.ValidTo,
                                CreationDate   = DateTime.Now,
                                RequestIndex   = message.RequestIndex
                            };
                            db.MessageArchives.Add(archive);

                            // delete from Messages db table
                            db.Messages.Remove(message);
                        }
                    }

                    content = string.Join(",", parts.ToArray());
                }
            }

            request.DeviceID = foundDeviceID;
            if (foundDeviceID == 0)
            {
                request.Remarks = id;
            }
            request.Message     = content;
            request.RequestDate = now;
            db.Requests.Add(request);

            db.SaveChanges();

            #region Record Statistics
            if (device != null)
            {
                // Record statistics
                DateTime?lastRequestTime = device.LastRequestTime;

                device.LastRequestId      = request.ID;
                device.LastRequestMessage = request.Message;
                device.LastRequestTime    = request.RequestDate;
                if (string.IsNullOrEmpty(content) == false)
                {
                    device.LastCommandIssued    = request.Message;
                    device.LastCommandIssueTime = request.RequestDate;
                }

                bool dayChanged   = true;
                bool monthChanged = true;
                bool yearChanged  = true;
                if (lastRequestTime.HasValue)
                {
                    dayChanged   = (lastRequestTime.Value.Day != now.Day);
                    monthChanged = (lastRequestTime.Value.Month != now.Month);
                    yearChanged  = (lastRequestTime.Value.Year != now.Year);
                }

                DateTime nowTime = new DateTime(1900, 1, 1, now.Hour, now.Minute, now.Second);

                if (dayChanged)
                {
                    device.YesterdayEarliestRequestTime = device.TodayEarliestRequestTime;
                    device.TodayEarliestRequestTime     = now;
                    device.YesterdayLatestRequestTime   = lastRequestTime;

                    if (device.ThisMonthEarliestRequestTime.HasValue == false ||
                        new DateTime(1900, 1, 1, device.ThisMonthEarliestRequestTime.Value.Hour, device.ThisMonthEarliestRequestTime.Value.Minute, device.ThisMonthEarliestRequestTime.Value.Second) > nowTime)
                    {
                        device.ThisMonthEarliestRequestTime = now;
                    }

                    if (device.ThisMonthLatestRequestTime.HasValue == false ||
                        new DateTime(1900, 1, 1, device.ThisMonthLatestRequestTime.Value.Hour, device.ThisMonthLatestRequestTime.Value.Minute, device.ThisMonthLatestRequestTime.Value.Second) < device.YesterdayLatestRequestTime)
                    {
                        device.ThisMonthLatestRequestTime = device.YesterdayLatestRequestTime;
                    }

                    if (device.TodayRequestCount.HasValue)
                    {
                        device.YesterdayRequestCount = device.TodayRequestCount;
                    }

                    device.TodayRequestCount = 1;

                    if (device.TodayNetworkConnectivity.HasValue)
                    {
                        List <string> pastNetworkConnectivity = new List <string>(30);
                        if (device.Last30DaysNetworkConnectivity != null)
                        {
                            pastNetworkConnectivity.AddRange(device.Last30DaysNetworkConnectivity.Split(new char[] { ',' }));
                        }
                        pastNetworkConnectivity.Add(device.TodayNetworkConnectivity.ToString());
                        while (pastNetworkConnectivity.Count > 30)
                        {
                            pastNetworkConnectivity.RemoveAt(0);
                        }

                        device.Last30DaysNetworkConnectivity = string.Join(",", pastNetworkConnectivity.ToArray());
                    }

                    device.TodayNetworkConnectivity = 100;
                }
                else
                {
                    device.TodayRequestCount++;

                    int expectedRequests = Convert.ToInt32(Math.Floor(now.Subtract(device.TodayEarliestRequestTime.Value).TotalMinutes / 2)); // Assume a request every 2 minutes
                    if (expectedRequests == 0)
                    {
                        expectedRequests = 1;
                    }
                    device.TodayNetworkConnectivity = Convert.ToInt32(Math.Floor((double)(device.TodayRequestCount.Value * 100 / expectedRequests)));
                }

                if (monthChanged)
                {
                    device.ThisMonthEarliestRequestTime = now;
                    device.ThisMonthLatestRequestTime   = null;

                    if (device.ThisMonthRequestCount.HasValue)
                    {
                        device.LastMonthRequestCount = device.ThisMonthRequestCount;
                    }

                    device.ThisMonthRequestCount = 1;
                }
                else
                {
                    device.ThisMonthRequestCount++;
                }

                if (yearChanged)
                {
                    device.ThisYearRequestCount = 1;
                }
                else
                {
                    device.ThisYearRequestCount++;
                }

                db.Entry(device).State = EntityState.Modified;
                db.SaveChanges();
            }
            #endregion Record Statistics

            return(content);
        }