private MessageRecipient AddUser(string userId, string userName) { var user = new MessageRecipient(); user.messageRecipientId = userId; user.messageRecipientName = userName; user.connectionId = Context.ConnectionId; _chatUsers[userId] = user; return user; }
private Boolean CheckIfRoomExists(MessageRecipient fromUser, MessageRecipient toUser) { foreach (string chatRoomId in fromUser.chatRoomIds) { Int32 count = (from mr in _chatRooms[chatRoomId].messageRecipients where mr.messageRecipientId == toUser.messageRecipientId select mr).Count(); if (count > 0) { return true; } } foreach (string chatRoomId in toUser.chatRoomIds) { Int32 count = (from mr in _chatRooms[chatRoomId].messageRecipients where mr.messageRecipientId == fromUser.messageRecipientId select mr).Count(); if (count > 0) { return true; } } return false; }
public bool EndChat(ChatMessage chatMessage) { try { ChatRoom chatRoom; if (_chatRooms.TryGetValue(chatMessage.conversationId, out chatRoom)) { if (_chatRooms[chatRoom.chatRoomId].chatRoomInitiatedBy == chatMessage.senderId) { chatMessage.messageText = string.Format("{0} left the chat. Chat Ended!", chatMessage.senderName); if (_chatRooms.TryRemove(chatRoom.chatRoomId, out chatRoom)) { Clients[chatRoom.chatRoomId].receiveEndChatMessage(chatMessage); foreach (MessageRecipient messageReceipient in chatRoom.messageRecipients) { if (messageReceipient.chatRoomIds.Contains(chatRoom.chatRoomId)) { messageReceipient.chatRoomIds.Remove(chatRoom.chatRoomId); Groups.Remove(messageReceipient.connectionId, chatRoom.chatRoomId); } } } } else { MessageRecipient messageRecipient = GetChatUserByUserId(chatMessage.senderId); if (messageRecipient != null && messageRecipient.chatRoomIds.Contains(chatRoom.chatRoomId)) { chatRoom.messageRecipients.Remove(messageRecipient); messageRecipient.chatRoomIds.Remove(chatRoom.chatRoomId); if (chatRoom.messageRecipients.Count < 2) { chatMessage.messageText = string.Format("{0} left the chat. Chat Ended!", chatMessage.senderName); if (_chatRooms.TryRemove(chatRoom.chatRoomId, out chatRoom)) { Clients[chatRoom.chatRoomId].receiveEndChatMessage(chatMessage); foreach (MessageRecipient messageReceipient in chatRoom.messageRecipients) { if (messageReceipient.chatRoomIds.Contains(chatRoom.chatRoomId)) { messageReceipient.chatRoomIds.Remove(chatRoom.chatRoomId); Groups.Remove(messageReceipient.connectionId, chatRoom.chatRoomId); } } } } else { chatMessage.messageText = string.Format("{0} left the chat.", chatMessage.senderName); Groups.Remove(messageRecipient.connectionId, chatRoom.chatRoomId); Clients[messageRecipient.connectionId].receiveEndChatMessage(chatMessage); Clients[chatRoom.chatRoomId].receiveLeftChatMessage(chatMessage); Clients[chatRoom.chatRoomId].updateChatUI(chatRoom); } } } } else { throw new InvalidOperationException("Problem in ending chat!"); } return(true); } catch (Exception ex) { return(false); //throw new InvalidOperationException("Problem in ending chat!"); } }