public CloudTalkController() { using (var db = new CloudTalkEntities()) { AllClients = db.Client.ToList(); } }
private void SendMessage(ChatMember _from, object _msg, string _roomName, string _to = null, EventType _type = EventType.Message) { if (_from == null) { throw new ArgumentNullException("_from"); } if (String.IsNullOrWhiteSpace(_roomName)) { throw new ArgumentNullException("_roomName"); } if (_msg == null) { throw new ArgumentNullException("_msg"); } var room = GetChatRoom(_roomName); if (room == null) { throw new ArgumentException("_roomName"); } if (_to != null && room.GetMember(_to) == null && room.GetWaitingMember(_to) == null) { throw new ArgumentException("_to"); } var newEvent = EventFactory.NewEvent(_type); var jss = new JavaScriptSerializer(); newEvent.RoomName = _from.Name; newEvent.SenderName = _from.Name; newEvent.SenderEmail = _from.Email; newEvent.Text = jss.Serialize(_msg); newEvent.Timestamp = DateTime.Now; newEvent.RoomName = room.Name; var roomClients = room.Members.Where(c => c.Email != _from.Email); if (_to != null) { // direct message newEvent.Recipients.Add(_to); } else { // broadcast message newEvent.Recipients.AddRange(roomClients.Select(c => c.Email)); } messages.Add(newEvent); using (var db = new CloudTalkEntities()) { db.AddToHistory(new History { Room = _roomName, Client = db.Client.First(c => c.Id == room.OwnerId), Sender = _from.Email, Text = _msg.ToString(), Timestamp = DateTime.Now.ToString() }); db.SaveChanges(); } foreach (var item in roomClients) { SignalMember(item.Email); } }