Example #1
0
        public IActionResult Post([FromBody] Message message)
        {
            var messages = _context.Messages.Add(message);

            _context.SaveChanges();
            return(Ok());
        }
Example #2
0
        public T Insert(T entity)
        {
            T result = m_DbContext.Set <T>().Add(entity).Entity;

            m_DbContext.SaveChanges();
            return(result);
        }
        public int Create(UserFriend userFriend)
        {
            Context.UserFriends.Add(userFriend);
            Context.SaveChanges();

            return(userFriend.FriendId);
        }
Example #4
0
        public void Insert(T entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }

            entities.Add(entity);

            context.SaveChanges();
        }
        public IActionResult DeleteById(int id, [FromHeader] int UserID, [FromHeader] string UserRole)
        {
            var chat = _context.Chats.Find(id);

            if (chat == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound));
            }

            if (_user.GetUserById(UserID) == null)
            {
                return(StatusCode(StatusCodes.Status400BadRequest));
            }

            if (chat.CreatedBy != UserID && UserRole != "Admin")
            {
                return(StatusCode(StatusCodes.Status403Forbidden));
            }

            _context.Chats.Remove(chat);
            var success = _context.SaveChanges();

            if (success < 1)
            {
                return(StatusCode(StatusCodes.Status400BadRequest));
            }

            this._loggerCommunication.logAction("Deleted a chat with id:" + id);

            return(StatusCode(StatusCodes.Status202Accepted, new JsonResult(chat)));
        }
 public static void CleanupTestTrack()
 {
     int deleteResult = -1;
     MessagingContext context = null;
     #region Clean database of records added during test
     try
     {
         using (context = new MessagingContext(connectionStringName))
         {
             MessagePing recordToDelete = context.FindOne(new object[] { recordId });
             bool recordIsNotAvailable = null != recordToDelete;
             if (recordIsNotAvailable)
             {
                 context.Remove(recordToDelete);
                 deleteResult = context.SaveChanges();
             }
         }
     }
     catch { }
     finally
     {
         if (null != context)
         {
             context.Dispose();
         }
     }
     #endregion
 }
Example #7
0
        public JsonResult MessagesViewed()
        {
            string user = User.Identity.GetUserName();

            using (var db = new MessagingContext())
            {
                var updateQuery = db.Messages.Where(f => f.ToUserID == user).ToList();

                updateQuery.ForEach(a => a.Seen = true);

                var ImageDeleteQuery = db.Messages.Where(f => f.ToUserID == user && f.Image != null).ToList();

                foreach (var item in ImageDeleteQuery)
                {
                    string fullPath = Request.MapPath("~/ContentUser/" + Encoding.ASCII.GetString(item.Image));
                    if (System.IO.File.Exists(fullPath))
                    {
                        System.IO.File.Delete(fullPath);
                    }
                }

                //db.Messages.RemoveRange(db.Messages.Where(f => f.ToUserID == user && f.Image != null));
                db.SaveChanges();

                return(Json(new { result = "ok" }));
            }
        }
        public int Create(User user)
        {
            Context.Users.Add(user);
            Context.SaveChanges();

            return(user.UserId);
        }
        /* This thread ensures that messages aggregated from various partners are added to the queue in the correct order */
        public void HandleQueueBuffer()
        {
            /* Iterate over all the queues and look for messages that expired their indexing period and should enter the queue */
            using (var ctx = new MessagingContext())
            {
                foreach (var q in ctx.MsgQueues)
                {
                    var messages = ctx.QueueBuffer.Where(m => (m.QueueId == q.Id));

                    var messageList = new List <QueueBuffer>();

                    foreach (var m in messages)
                    {
                        if (DateTime.UtcNow.Ticks + Config <long> .GetInstance()["TIMEZONE_CORRECTION"] > m.Timestamp + Config <int> .GetInstance()["QUEUE_GRACE_PERIOD"])
                        {
                            /* Add this message to the queue. We assume that by now all slaves have synced */
                            messageList.Add(m);
                        }
                    }

                    /* Sort by time of arrival */
                    messageList.Sort((a, b) => ((int)(a.Timestamp - b.Timestamp)));

                    foreach (var m in messageList)
                    {
                        WriteQueue(ctx, m.UserId, m.NodeId, m.QueueId, m.Data, m.Timestamp);

                        ctx.QueueBuffer.Remove(m);

                        /* Important to save here for consistancy */
                        ctx.SaveChanges();
                    }
                }
            }
        }
        public void CommitQueue(int userId, int nodeId, int readerId, int readerNodeId, string queueName)
        {
            using (var ctx = new MessagingContext())
            {
                //var r = ctx.Readers.FirstOrDefault(reader => reader.UserId == userId && reader.NodeId == nodeId);
                var r = ctx.Readers.FirstOrDefault(reader => reader.UserId == readerId && reader.NodeId == readerNodeId);

                /* For now, remember messages only until the last user read them */
                var q = ctx.MsgQueues.FirstOrDefault(queue => queue.Name == queueName && queue.UserId == userId && queue.NodeId == nodeId);

                int highestIndex = ctx.Readers.FirstOrDefault(reader => reader.UserId == readerId && reader.NodeId == readerNodeId).Position;

                foreach (Message m in q.Messages.FindAll(m => (m.MsgIdx > highestIndex)))
                {
                    if (m.MsgIdx > highestIndex)
                    {
                        highestIndex = m.MsgIdx;
                    }
                }

                r.Position = highestIndex;
                q.Messages.RemoveAll(m => (m.MsgIdx <= q.Readers.Min(rUser => (rUser.Position))));

                ctx.SaveChanges();
            }
        }
Example #11
0
        static void Main(string[] args)
        {
            string url = "http://localhost:45000";

            using (WebApp.Start(url))
            {
                Console.WriteLine("Server running on {0}", url);
                while (Console.ReadKey().Key != ConsoleKey.Q)
                {
                    Console.WriteLine("Create new random message");
                    using (var db = new MessagingContext())
                    {
                        var message = new Message
                        {
                            Id       = Guid.NewGuid().ToString(),
                            ClientId = "SystemID",
                            DateTime = DateTimeOffset.Now,
                            Text     = "Random generated value: " + new Random().Next(1000)
                        };

                        db.Messages.Add(message);
                        db.SaveChanges();
                        Console.WriteLine(
                            $"Client '{message.ClientId}' created message '{message.Text}' at {message.DateTime}");
                    }
                }
            }
        }
        public void CreateQueue(int userId, int nodeId, string queueName, List <List <int> > readers)
        {
            using (var ctx = new MessagingContext())
            {
                var u = ctx.Users.Include(user => user.Queues).First(user => user.Id == userId && user.IssueNodeId == nodeId);

                if (u == null)
                {
                    throw new Exception("Invalid userId");
                }

                if (u.Queues == null)
                {
                    u.Queues = new List <MsgQueue>();
                }

                if (u.Queues.Find(queue => (queue.Name == queueName)) != null)
                {
                    throw new Exception("Invalid queue name: Already exists");
                }

                if (u.Queues.Count >= Config <int> .GetInstance()["USER_MAX_QUEUES"])
                {
                    throw new Exception("User has too many queues.");
                }

                /* Create a dictionary with mapping for everyone */
                var newQueue = new MsgQueue()
                {
                    Name = queueName, TopMsgIdx = 0, Readers = new List <Reader>()
                };

                foreach (var uid in readers)
                {
                    var reader = ctx.Users.Find(uid[0], uid[1]);

                    /* Invalid reader Id */
                    if (reader == null)
                    {
                        continue;
                    }

                    var r = new Reader {
                        User = reader, Position = newQueue.TopMsgIdx - 1, NodeId = nodeId, UserId = userId, Queue = newQueue
                    };

                    ctx.Readers.Add(r);
                    newQueue.Readers.Add(r);
                }

                u.Queues.Add(newQueue);

                ctx.SaveChanges();
            }
        }
        private void CleanOldMessageQueues(MessagingContext ctx, MsgQueue q)
        {
            /* Clean old messages */
            foreach (var m in q.Messages.FindAll(m => ((m.Timestamp + Config <int> .GetInstance()["QUEUE_MESSAGE_MAX_AGE"]) / 100 < DateTime.UtcNow.Ticks / 100)))
            {
                q.Messages.Remove(m);
                ctx.Messages.Remove(m);
            }

            ctx.SaveChanges();
        }
Example #14
0
        public void AddUpdateDeleteUser()
        {
            user = new User {
                Id = 1, Login = "******"
            };
            context.Users.Add(user);
            context.SaveChanges();
            var userFromDb = context.Users.Find(1);

            Assert.IsNotNull(userFromDb);
            Assert.AreEqual(userFromDb.Id, 1);
            Assert.AreEqual(userFromDb.Login, "NK");

            user.Login = "******";
            context.Users.Update(user);
            context.SaveChanges();
            userFromDb = context.Users.Find(1);
            Assert.IsNotNull(userFromDb);
            Assert.AreEqual(userFromDb.Id, 1);
            Assert.AreEqual(userFromDb.Login, "neNK");

            context.Users.Remove(user);
            context.SaveChanges();
            userFromDb = context.Users.Find(1);
            Assert.IsNull(userFromDb);
        }
Example #15
0
        public static int RegisterUser(int NodeId, int UserId, byte[] key)
        {
            var u = new User {
                Id = UserId, IssueNodeId = NodeId, Key = ComputeHash(key), Queues = new List <MsgQueue>()
            };

            using (var ctx = new MessagingContext())
            {
                ctx.Users.Add(u);
                ctx.SaveChanges();
            }

            return(u.Id);
        }
Example #16
0
        public ActionResult SendMessage(SendMessageViewModel model)
        {
            Message msg = CreateNewMessage();

            msg.MessageText = model.MessageText;

            using (var db = new MessagingContext())
            {
                db.Messages.Add(msg);
                db.SaveChanges();
            }
            ModelState.Clear();
            return(View("Index"));
        }
Example #17
0
        public void Create(MessageDto dto)
        {
            var messageToSave = new Message
            {
                Description = dto.Description,
                Title       = dto.Title,
                CreatedDate = DateTime.UtcNow,
                User        = dto.User
            };

            _context.Messages.Add(messageToSave);
            _context.SaveChanges();

            dto.CreatedDate = messageToSave.CreatedDate;
        }
Example #18
0
        public static string generateSessionKey(int id, int nodeId)
        {
            var sess = _generateSessionKey();

            using (var ctx = new MessagingContext())
            {
                while (ctx.Users.FirstOrDefault(user => (user.SessionKey == sess)) != null)
                {
                    sess = _generateSessionKey();
                }

                var u = ctx.Users.Find(id, nodeId);

                u.SessionKey = sess;

                ctx.SaveChanges();
            }

            return(sess);
        }
Example #19
0
        public async Task SendMessage(string message, string sentTo)
        {
            string userName;

            try
            {
                userName = Context.User.Identity.Name;
                _context.Message.Add(new Message()
                {
                    MessageText = message, SentFrom = userName, SentTo = sentTo
                });
                _context.SaveChanges();
            }
            catch (System.NullReferenceException)
            {
                //Username unavailable
                userName = "******";
            }

            await Clients.All.SendAsync("ReceiveMessage", userName, message);
        }
        public bool WriteBufferedQueue(int userId, int nodeId, string queueName, string Data, DateTime Timestamp)
        {
            using (var ctx = new MessagingContext())
            {
                var u = ctx.Users.Include(user => user.Queues).FirstOrDefault(user => user.Id == userId && user.IssueNodeId == nodeId);

                if (u == null)
                {
                    throw new Exception("Invalid userId");
                }

                var q = u.Queues.Find(queue => (queue.Name == queueName));

                if (q == null)
                {
                    throw new Exception("Invalid queue");
                }

                /* Clean old messages */
                CleanOldMessageQueues(ctx, q);

                var queuedMessagesSize = ctx.QueueBuffer.Where(qb => qb.QueueId == q.Id).Select(qb => qb.Data).ToList().Sum(d => d.Length);

                var queueContentLength = q.Messages.Select(m => m.Content).ToList().Sum(m => m.Length);

                if (!IsEnoughQueueSpace(queuedMessagesSize, queueContentLength, Data))
                {
                    return(false);
                }

                ctx.QueueBuffer.Add(new QueueBuffer {
                    User = u, Queue = q, Timestamp = Timestamp.Ticks, Data = Data
                });

                ctx.SaveChanges();
            }

            return(true);
        }
        private void WriteQueue(MessagingContext ctx, int userId, int nodeId, int queueId, string Data, long Timestamp)
        {
            var u = ctx.Users.Include(user => user.Queues).FirstOrDefault(user => user.Id == userId && user.IssueNodeId == nodeId);

            if (u == null)
            {
                throw new Exception("Invalid userId");
            }

            var q = ctx.MsgQueues.Include(queue => queue.Messages).FirstOrDefault(queue => (queue.Id == queueId));

            if (q == null)
            {
                throw new Exception("Invalid queue");
            }

            q.Messages.Add(new Message {
                Content = Data, MsgIdx = q.TopMsgIdx++, Timestamp = Timestamp, QueueId = queueId, Queue = q
            });

            ctx.SaveChanges();
        }
Example #22
0
        public ActionResult FileUpload(HttpPostedFileBase file)
        {
            if (file != null)
            {
                var fileName = Guid.NewGuid().ToString() +
                               System.IO.Path.GetExtension(file.FileName);

                string contentFolder = Server.MapPath("~/ContentUser");

                string fullFileName = Path.Combine(contentFolder, fileName);

                file.SaveAs(Path.Combine(contentFolder, fileName));

                //string pic = System.IO.Path.GetFileName(file.FileName);

                /* byte[] array = null;
                 *   using (MemoryStream ms = new MemoryStream())
                 * {
                 *     file.InputStream.CopyTo(ms);
                 *     array = ms.GetBuffer();
                 * }*/

                Message msg = CreateNewMessage();

                msg.Image = Encoding.ASCII.GetBytes(fileName);

                using (var db = new MessagingContext())
                {
                    db.Messages.Add(msg);
                    db.SaveChanges();
                }

                ModelState.Clear();
                return(View("Index"));
            }
            // after successfully uploading redirect the user
            return(RedirectToAction("actionname", "controller name"));
        }
Example #23
0
        public static int RegisterUser(int NodeId, byte[] key)
        {
            var u = new User {
                IssueNodeId = NodeId, Key = ComputeHash(key), Queues = new List <MsgQueue>()
            };

            using (var ctx = new MessagingContext())
            {
                /* Generate an incrementing Id as SQLite apparently drops the autoincrement when there are multiple fields for PK */
                try
                {
                    u.Id = ctx.Users.Max(user => user.Id) + 1;
                }
                catch (InvalidOperationException e)
                {
                    u.Id = 0;
                }

                ctx.Users.Add(u);
                ctx.SaveChanges();
            }

            return(u.Id);
        }
        public List <string> ReadQueue(int requestingUser, int userId, int nodeId, string queueName, bool commit)
        {
            var messages = new List <string>();

            using (var ctx = new MessagingContext())
            {
                var u = ctx.Users.Include(user => user.Queues).FirstOrDefault(user => user.Id == userId && user.IssueNodeId == nodeId);

                if (u == null)
                {
                    throw new Exception("Invalid userId");
                }

                var reader = ctx.Users.Find(requestingUser, nodeId);

                if (reader == null)
                {
                    throw new Exception("Invalid readerId");
                }

                var q = u.Queues.Find(queue => (queue.Name == queueName));

                if (q == null)
                {
                    throw new Exception("Invalid queue");
                }

                /* Clean old messages */
                CleanOldMessageQueues(ctx, q);

                var r = q.Readers.Find(uReader => (uReader.UserId == requestingUser && uReader.NodeId == nodeId));

                if (r == null)
                {
                    throw new Exception("Permission denied: Invalid reader");
                }

                int highestIndex = r.Position;

                //q = ctx.MsgQueues.Include(queue => queue.Messages).FirstOrDefault(queue => queue.Id == q.Id);
                Console.WriteLine("Queue " + q.Id + " Count: " + q.Messages.Count);

                foreach (Message m in q.Messages.FindAll(m => (m.MsgIdx > highestIndex)))
                {
                    messages.Add(m.Content);

                    if (m.MsgIdx > highestIndex)
                    {
                        highestIndex = m.MsgIdx;
                    }
                }

                if (commit)
                {
                    /* Update user commit message */
                    r.Position = highestIndex;

                    /* For now, remember messages only until the last user read them */
                    foreach (var m in q.Messages.FindAll(m => (m.MsgIdx <= q.Readers.Min(rUser => (rUser.Position)))))
                    {
                        q.Messages.Remove(m);
                        ctx.Messages.Remove(m);
                    }
                }

                ctx.SaveChanges();
            }

            return(messages);
        }
        public void UpdateRecordToDatabase()
        {
            #region Test Setup
            MessagePing testSubject;
            #endregion

            #region Test

            using (var context = new MessagingContext(connectionStringName))
            {
                try
                {
                    testSubject = AssertRecordExistence(recordId, context);
                }
                catch (AssertFailedException)
                {
                    AddRecordsToDatabase();
                    testSubject = AssertRecordExistence(recordId, context);
                }

                testSubject.Message = updatedMessage;
                context.SaveChanges();
            }

            testSubject = null;

            using (var context = new MessagingContext(connectionStringName))
            {
                testSubject = context.FindOne(new object[] { recordId });
                Assert.IsNotNull(testSubject, "Record not found in database");
                Assert.IsTrue(updatedMessage == testSubject.Message, "Record was not updated");
            }

            #endregion
        }