/// <summary>
 /// Save ChatHistory FromSocket
 /// </summary>
 /// <param name="chatHistory"></param>
 public static void SaveChatHistoryFromSocket(SocketSentChatVM chatHistory)
 {
     try
     {
         SendChatNotification(chatHistory);
     }
     catch
     {
         throw;
     }
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="credUserId"></param>
        /// <param name="message"></param>
        private static void SendChatNotification(SocketSentChatVM chatHistory)
        {
            byte[] certificate = File.ReadAllBytes(chatHistory.CeritifcatePath);
            new Thread(() =>
            {
                Thread.CurrentThread.IsBackground = false;
                lock (syncLock)
                {
                    StringBuilder traceLog = null;
                    List <UserNotification> allactiveDevices = null;
                    using (LinksMediaContext dataContext = new LinksMediaContext())
                    {
                        try
                        {
                            traceLog = new StringBuilder();
                            traceLog.Append("Start:SendChatNotification()");
                            string notificationType = string.Empty;
                            traceLog.AppendLine("Start: SendChallegesNotificationToUser()");

                            List <tblCredentials> chatsenderReceiverDetails = dataContext.Credentials.Where(em => string.Compare(em.EmailId, chatHistory.ReceiverEmailId, StringComparison.OrdinalIgnoreCase) == 0 || string.Compare(em.EmailId, chatHistory.SenderEmailId, StringComparison.OrdinalIgnoreCase) == 0).ToList();
                            int receiverCredId    = 0;
                            int senderCredId      = 0;
                            string senderUserType = string.Empty;
                            if (chatsenderReceiverDetails != null)
                            {
                                receiverCredId = chatsenderReceiverDetails.Where(em => em.EmailId.Equals(chatHistory.ReceiverEmailId, StringComparison.OrdinalIgnoreCase)).Select(cr => cr.Id).FirstOrDefault();
                                senderCredId   = chatsenderReceiverDetails.Where(em => em.EmailId.Equals(chatHistory.SenderEmailId, StringComparison.OrdinalIgnoreCase)).Select(cr => cr.Id).FirstOrDefault();
                                senderUserType = chatsenderReceiverDetails.Where(em => em.EmailId.Equals(chatHistory.SenderEmailId, StringComparison.OrdinalIgnoreCase)).Select(cr => cr.UserType).FirstOrDefault();
                            }

                            if (chatHistory != null && receiverCredId > 0 && senderCredId > 0 && !string.IsNullOrEmpty(chatHistory.Message))
                            {
                                bool isRead = false;
                                if (!chatHistory.IsOffine)
                                {
                                    isRead = true;
                                }
                                tblChatHistory objChatHistory = new tblChatHistory()
                                {
                                    ReceiverCredId     = receiverCredId,
                                    SenderCredId       = senderCredId,
                                    Message            = chatHistory.Message,
                                    IsRead             = isRead,
                                    TrasactionDateTime = Convert.ToDateTime(chatHistory.TrasactionDateTime),
                                };
                                dataContext.ChatHistory.Add(objChatHistory);
                                dataContext.SaveChanges();
                                if (chatHistory.IsOffine)
                                {
                                    string message         = string.Empty;
                                    allactiveDevices       = PushNotificationBL.GetLastUserDeviceID(receiverCredId);
                                    string senderFirstName = string.Empty;
                                    if (senderUserType.Equals(Message.UserTypeUser, StringComparison.OrdinalIgnoreCase))
                                    {
                                        senderFirstName = (from usr in dataContext.User
                                                           join crd in dataContext.Credentials
                                                           on usr.UserId equals crd.UserId
                                                           where crd.Id == senderCredId && crd.UserType == Message.UserTypeUser
                                                           select usr.FirstName + " " + usr.LastName).FirstOrDefault();
                                    }
                                    else if (senderUserType.Equals(Message.UserTypeTrainer, StringComparison.OrdinalIgnoreCase))
                                    {
                                        senderFirstName = (from usr in dataContext.Trainer
                                                           join crd in dataContext.Credentials
                                                           on usr.TrainerId equals crd.UserId
                                                           where crd.Id == senderCredId && crd.UserType == Message.UserTypeTrainer
                                                           select usr.FirstName + " " + usr.LastName).FirstOrDefault();
                                    }
                                    message = senderFirstName + " sent you a message!";
                                    bool isSaveSuccessfully = false;
                                    foreach (UserNotification objuserNotification in allactiveDevices)
                                    {
                                        // If Deives Token null then by pass to sending push notification
                                        if (!string.IsNullOrEmpty(objuserNotification.DeviceID))
                                        {
                                            if (!isSaveSuccessfully)
                                            {
                                                notificationType = ConstantHelper.constChatNotification;
                                                tblUserNotifications objdeviceNft = new tblUserNotifications
                                                {
                                                    SenderCredlID    = senderCredId,
                                                    ReceiverCredID   = receiverCredId,
                                                    NotificationType = notificationType,
                                                    SenderUserName   = senderFirstName,
                                                    Status           = true,
                                                    IsRead           = false,
                                                    TargetID         = 0,
                                                    CreatedDate      = DateTime.Parse(chatHistory.TrasactionDateTime),
                                                    TokenDevicesID   = objuserNotification.DeviceID
                                                };
                                                dataContext.UserNotifications.Add(objdeviceNft);
                                                dataContext.SaveChanges();
                                                isSaveSuccessfully = true;
                                            }
                                            PushNotificationiOSAndriod objPushNotificationiOSAndriod = new PushNotificationiOSAndriod();
                                            int totalNotificationcount = dataContext.ChatHistory.Count(ch => ch.ReceiverCredId == receiverCredId && ch.IsRead == false);
                                            int totalbudget            = CommonWebApiBL.GetTotalUSerNotification(receiverCredId, objuserNotification.DeviceID);
                                            if (objuserNotification.DeviceType.Equals(DeviceType.IOS.ToString(), StringComparison.OrdinalIgnoreCase))
                                            {
                                                objPushNotificationiOSAndriod.SendPushNotificationForiOS(objuserNotification.DeviceID, message, notificationType, totalNotificationcount, certificate, totalbudget, 0);
                                            }
                                            else if (objuserNotification.DeviceType.Equals(DeviceType.Android.ToString(), StringComparison.OrdinalIgnoreCase))
                                            {
                                                objPushNotificationiOSAndriod.SendPushNotificationForAndriod(objuserNotification.DeviceID, message, notificationType, totalNotificationcount, totalbudget, 0);
                                            }
                                        }
                                    }
                                    message = string.Empty;
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            LogManager.LogManagerInstance.WriteErrorLog(ex);
                        }
                        finally
                        {
                            traceLog.AppendLine("End: SendChatNotification()  --- " + DateTime.Now.ToLongDateString());
                            LogManager.LogManagerInstance.WriteTraceLog(traceLog);
                            traceLog         = null;
                            allactiveDevices = null;
                        }
                    }
                }
            }).Start();
        }
예제 #3
0
        /// <summary>
        /// Do ChatOperation
        /// </summary>
        /// <param name="senderId"></param>
        /// <param name="receiverId"></param>
        /// <param name="message"></param>
        /// <param name="operationId"></param>
        /// <param name="chatclientHashcode"></param>
        /// <returns></returns>
        private bool DoChatOperation(string senderId, string receiverId, string message, int operationId, int chatclientHashcode)
        {
            StringBuilder    traceLog         = null;
            SocketSentChatVM objChatHistoryVM = null;

            try
            {
                traceLog = new StringBuilder();
                traceLog.AppendLine("Start: start DoChatOperation" + senderId + receiverId + message + operationId + chatclientHashcode);
                bool IsOffine = false;
                switch (operationId)
                {
                case 1001:
                    senderId      = senderId.ToLower();
                    receiverId    = receiverId.ToLower();
                    senderEmailId = senderId;
                    if (!LinksMediaCorpChatServer.Program.connectByClientEmailId.ContainsKey(senderId))
                    {
                        Console.WriteLine("Start: Join chat room");
                        LinksMediaCorpChatServer.Program.connectByClientEmailId.TryAdd(senderId, chatclientHashcode);
                    }
                    else
                    {
                        int oldTCPClientId = LinksMediaCorpChatServer.Program.connectByClientEmailId[senderId];
                        if (oldTCPClientId > 0)
                        {
                            if (LinksMediaCorpChatServer.Program.connectByClientId.ContainsKey(oldTCPClientId))
                            {
                                HandleClientRequest objHandleClientRequest;
                                LinksMediaCorpChatServer.Program.connectByClientId.TryRemove(oldTCPClientId, out objHandleClientRequest);
                            }
                        }
                        Console.WriteLine("Start:  Again Join chat room");
                        LinksMediaCorpChatServer.Program.connectByClientEmailId[senderId] = chatclientHashcode;
                    }
                    break;

                case 1002:
                    if (!string.IsNullOrEmpty(message))
                    {
                        receiverEmailId = string.Empty;
                        senderEmailId   = string.Empty;

                        int receiverHashcode = 0;
                        if (!string.IsNullOrEmpty(receiverId))
                        {
                            receiverId = receiverId.ToLower(CultureInfo.InvariantCulture);
                        }
                        if (!string.IsNullOrEmpty(senderId))
                        {
                            senderId = senderId.ToLower(CultureInfo.InvariantCulture);
                        }
                        senderEmailId = senderId;
                        if (LinksMediaCorpChatServer.Program.connectByClientEmailId.ContainsKey(receiverId))
                        {
                            receiverHashcode = LinksMediaCorpChatServer.Program.connectByClientEmailId[receiverId];
                            receiverEmailId  = receiverId.ToLower(CultureInfo.InvariantCulture);
                        }
                        var sentDateTime = DateTime.UtcNow.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff");
                        if (receiverHashcode > 0)
                        {
                            //Save to database for History
                            string messagetxt       = "1003#" + senderId + "#" + receiverId + "#" + message + "#" + sentDateTime;
                            string receiversdetails = string.Empty;
                            receiversdetails = SendMsgToClientId(receiverHashcode, messagetxt, receiverId);
                            //Findout the sender and receiver
                            if (!string.IsNullOrEmpty(receiversdetails))
                            {
                                var receiverdata = receiversdetails.Split('#');
                                if (receiverdata != null && receiverdata.Length > 1)
                                {
                                    if (receiverdata[0] != "NA" && receiverdata[1] != "NA" && string.Compare(senderEmailId, receiverdata[1], StringComparison.OrdinalIgnoreCase) == 0 && string.Compare(receiverEmailId, receiverdata[0], StringComparison.OrdinalIgnoreCase) == 0)
                                    {
                                        IsOffine = false;
                                    }
                                    else
                                    {
                                        IsOffine = true;
                                    }
                                }
                            }
                            messagetxt = string.Empty;
                        }
                        else
                        {
                            IsOffine = true;
                        }
                        //string ceritifcatePath = Path.Combine(Environment.CurrentDirectory, "Resources\\CertificatesDev.p12");
                        string ceritifcatePath = Path.Combine(Environment.CurrentDirectory, "Resources\\Dist_Certificates.p12");
                        objChatHistoryVM = new SocketSentChatVM()
                        {
                            Message            = message,
                            ReceiverEmailId    = receiverId,
                            SenderEmailId      = senderId,
                            TrasactionDateTime = sentDateTime,
                            IsOffine           = IsOffine,
                            CeritifcatePath    = ceritifcatePath
                        };
                        //// Save data in background
                        ChatHistoryApiBL.SaveChatHistoryFromSocket(objChatHistoryVM);
                        message         = string.Empty;
                        ceritifcatePath = string.Empty;
                    }
                    break;

                case 1003:
                    if (!string.IsNullOrEmpty(senderId))
                    {
                        senderEmailId = senderId.ToLower(CultureInfo.InvariantCulture);
                    }
                    if (!string.IsNullOrEmpty(receiverId))
                    {
                        receiverEmailId = receiverId.ToLower(CultureInfo.InvariantCulture);
                    }
                    break;

                case 1004:
                    receiverEmailId = string.Empty;
                    break;

                case 1005:
                    if (!string.IsNullOrEmpty(senderId))
                    {
                        senderId = senderId.ToLower(CultureInfo.InvariantCulture);
                    }
                    RemoveClientChatUser(chatclientHashcode, senderId);
                    // closeConectionStatus = false;
                    break;
                }
                traceLog.AppendLine("End:DoChatOperation()-" + DateTime.Now.ToLongDateString());
                return(true);
            }
            catch (OutOfMemoryException e)
            {
                Console.WriteLine("Out of Memory: {0}", e.Message);
            }
            catch { }
            finally
            {
                LogManager.LogManagerInstance.WriteTraceLog(traceLog);
                objChatHistoryVM = null;
                traceLog         = null;
            }
            return(false);
        }