/// <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(); }
/// <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); }