public ServiceResult <SingleChatMessage> UpdateMessage(SingleChatMessage model)
        {
            var serviceResult = new ServiceResult <SingleChatMessage>();

            try
            {
                var entity = _uow.Repository <SingleChatMessage>()
                             .GetQueryable()
                             .FirstOrDefault(m => m.Id == model.Id && m.FromId == model.FromId);

                if (entity == null)
                {
                    serviceResult.Status = ResultStatus.Forbidden;
                    return(serviceResult);
                }

                entity.Update(model);

                _uow.SaveChanges();

                serviceResult.Status = ResultStatus.Success;
            }
            catch (Exception e)
            {
                serviceResult.Status = ResultStatus.ServerError;
            }

            return(serviceResult);
        }
Example #2
0
        } // end of method

        private void SendMessageToParticularClient(SingleChatMessage chatmessage, string sender, string intendedReceiver)
        {
            // Inform all of the clients of the new message
            List <string> callbackKeys = loggedInUsers?.Keys.ToList();

            // Loops through each logged in user
            foreach (string key in callbackKeys)
            {
                if (key == intendedReceiver || key == sender)
                {
                    try
                    {
                        IOneToOneChatCallback callback = loggedInUsers[key];
                        callback.SendMessageToParticularClient(chatmessage);
                        Console.WriteLine($"Sending user {key} message {chatmessage}");
                    }
                    // catches an issue with a user disconnect and loggs off that user
                    catch (Exception ex)
                    {
                        System.Diagnostics.Debug.WriteLine(ex.Message, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Namespace + "." + System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name);
                        // Remove the disconnected client
                        LeaveServer(key);
                    }
                }
            } // end of foreach
        }
        public ServiceResult <SingleChatMessage> CreateMessage(SingleChatMessage message)
        {
            var serviceResult = new ServiceResult <SingleChatMessage>();

            try
            {
                _uow.Repository <SingleChatMessage>().Add(message);
                _uow.SaveChanges();

                var result = _uow.Repository <SingleChatMessage>()
                             .GetQueryable()
                             .Include(s => s.To)
                             .Include(s => s.From)
                             .FirstOrDefault(m => message.Id == m.Id);

                serviceResult.Result = result;
                serviceResult.Status = ResultStatus.Success;
            }
            catch (Exception e)
            {
                serviceResult.Status = ResultStatus.ServerError;
            }

            return(serviceResult);
        }
        } // end of method

        #endregion methods

        #region Ionetoonechatservicecallback implementataion
        public void SendMessageToParticularClient(SingleChatMessage message)
        {
            // Don't receive any messages until the chat history is loaded
            if (!IsChatHistoryLoaded)
            {
                return;
            }

            try
            {
                // UI Threading Sync
                if (lstChatMessages.InvokeRequired)
                {
                    // UI Thread Sync is Required, Invoke the Request on the
                    // UI thread
                    Action <SingleChatMessage> del = new Action <SingleChatMessage>(SendMessageToParticularClient);
                    lstChatMessages.BeginInvoke(del, message);
                }
                // Add the recent chat message to the listbox
                else
                {
                    lstChatMessages.Items.Add(message);
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Namespace + "." + System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name);
                MessageBox.Show("Error receiving message: " + ex.Message);
            }
        }
        public static SingleChatMessageApiModel From(SingleChatMessage entity)
        {
            if (entity == null)
            {
                return(null);
            }

            return(new SingleChatMessageApiModel
            {
                FullName = entity.From.FirstName + " " + entity.From.LastName,
                Text = entity.Text,
                FromId = entity.FromId,
                ToId = entity.ToId,
                PostTime = entity.PostTime,
                LastEdited = DateTime.UtcNow
            });
        }
Example #6
0
        /// <summary>
        /// Methods Adds Message to local queue as well as to DB
        /// </summary>
        /// <param name="message"></param>
        private void AddMessage(SingleChatMessage message)
        {
            DbInit();

            // There is a Message Limit
            // Dequeue then Enqueue
            if (chatMessages?.Count >= maximumMessages)
            {
                chatMessages.Dequeue();
                chatMessages.Enqueue(message);
            }
            // Enqueue
            else
            {
                chatMessages?.Enqueue(message);
            }

            // update message history in database table
            cmd.CommandText = "Insert into [OneToOneChatMessages] values(@SenderId, @ReceiveId, @SenderName,@ReceiveName, @Message, @TimeStamp)";
            cmd.Parameters.AddWithValue("@SenderId", message.SenderId);
            cmd.Parameters.AddWithValue("@ReceiveId", message.ReceiveId);
            cmd.Parameters.AddWithValue("@SenderName", message.SenderName);
            cmd.Parameters.AddWithValue("@ReceiveName", message.ReceiverName);
            cmd.Parameters.AddWithValue("@Message", message.Message);
            cmd.Parameters.AddWithValue("@TimeStamp", message.TimeStamp);
            conn.Open();

            SingleChatMessage newMessage;

            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (System.Data.SqlClient.SqlException e) // If phonenumber is already exists then
            {
                conn.Close();
            }

            newMessage = message;
            conn.Close();

            return;
        } // end of method
        public ServiceResult DeleteMessage(SingleChatMessage model)
        {
            var serviceResult = new ServiceResult();

            try
            {
                var entity = _uow.Repository <SingleChatMessage>()
                             .GetQueryable()
                             .FirstOrDefault(m => m.FromId == model.FromId && m.Id == model.Id);

                entity.IsDeleted = DeletedMessage.ForSender;

                serviceResult.Status = ResultStatus.Success;
            }
            catch (Exception e)
            {
                serviceResult.Status = ResultStatus.ServerError;
            }

            return(serviceResult);
        }
Example #8
0
        } // end of  method

        public void SendMessageToParticularUser(string sender, string receiver, string messageText)
        {
            // Trim the Username to 15 Characters
            if (sender.Length > 15)
            {
                sender = sender.Substring(0, 15);
            }

            try
            {
                User messageSenderUser   = new User();
                User messageReceiverUser = new User();

                //Verify the User is Logged On First
                if (sender != "Admin" || receiver != "Admin" || !loggedInUsers.ContainsKey(sender))
                {
                    messageSenderUser = userService.GetUserByUserName(sender);
                }

                messageSenderUser   = userService.GetUserByUserName(sender);
                messageReceiverUser = userService.GetUserByUserName(receiver);

                // Create New Message Object
                SingleChatMessage chatmessage = new SingleChatMessage(messageSenderUser.UserId, messageReceiverUser.UserId, sender, receiver, messageText, DateTime.Now);

                // Add to Message History
                AddMessage(chatmessage);

                // Transmitt to Intended User
                SendMessageToParticularClient(chatmessage, sender, receiver);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Namespace + "." + System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name);
            }
        }
 public static void Update(this SingleChatMessage dest, SingleChatMessage source)
 {
     dest.Text       = source.Text;
     dest.LastEdited = DateTime.UtcNow;
 }