private ConnectionRecord SetupConnectionRecord() { string username = Clients.Caller.username; //if (string.IsNullOrEmpty(username)) //{ // Clients.Caller.newMessageNoParse(new Message { AuthorName = Localization.GetString("SystemName.Text", "~/desktopmodules/DnnChat/app_localresources/" + Localization.LocalSharedResourceFile), ConnectionId = "0", MessageDate = DateTime.UtcNow, MessageId = -1, MessageText = string.Format(Localization.GetString("BadConnection.Text", "~/desktopmodules/DnnChat/app_localresources/" + Localization.LocalSharedResourceFile), "phantom") }); // return new ConnectionRecord(); //} if (username.Trim() == "phantom" || username.Trim() == string.Empty) { username = string.Format(Localization.GetString("AnonymousUser.Text", "~/desktopmodules/DnnChat/app_localresources/" + Localization.LocalSharedResourceFile), (Users.Count + 1)); } Clients.Caller.username = username; var userId = -1; if (Convert.ToInt32(Clients.Caller.userid) > 0) { userId = Convert.ToInt32(Clients.Caller.userid); } //check if the connectionrecord is already in the DB var crc = new ConnectionRecordController(); var c = crc.GetConnectionRecordByConnectionId(Context.ConnectionId); if (c != null) { c.UserName = username; crc.UpdateConnectionRecord(c); } else { c = new ConnectionRecord { ConnectionId = Context.ConnectionId, ConnectedDate = DateTime.UtcNow, ModuleId = Convert.ToInt32(Clients.Caller.moduleid), UserName = username, UserId = userId, IpAddress = GetIpAddress() }; //Users.Add(c); crc.CreateConnectionRecord(c); } //store the record for the connection return(c); }
/* * This method gets called when someone updates their name. We need to store the change in the ConnectionRecord * We also want to send that info back to the client's state to update it there. */ public string UpdateName(string userName) { var crc = new ConnectionRecordController(); var id = Context.ConnectionId; var cr = crc.GetConnectionRecordByConnectionId(id); var crId = cr.ConnectionRecordId; //we need to remove the original CR before updating it in the users list //TODO: this isn't the right search var roomList = Users.FindAll(c => (c.ConnectionRecordId == crId)); foreach (UserListRecords rr in roomList) { //todo: it doesn't look like the Remove happens on the client side Users.Remove(rr); var originalName = rr.UserName; //set the new name on both record objects rr.UserName = cr.UserName = userName; //we need to update with the connectionrecord not UserListRecord crc.UpdateConnectionRecord(cr); Users.Add(rr); var nameChange = String.Format(Localization.GetString("NameChange.Text", "~/desktopmodules/DnnChat/app_localresources/" + Localization.LocalSharedResourceFile), originalName, rr.UserName); Clients.Group(rr.RoomId.ToString()).updateUserList(Users.FindAll(uc => (uc.RoomId == rr.RoomId)), rr.RoomId); var m = new Message { ConnectionId = Context.ConnectionId, MessageDate = DateTime.UtcNow, MessageText = nameChange, AuthorName = originalName, AuthorUserId = -1, ModuleId = rr.ModuleId, RoomId = rr.RoomId }; new MessageController().CreateMessage(m); Clients.Group(rr.RoomId.ToString()).newMessage(m); //update message for all rooms } Clients.Caller.updateName(userName); //else return nothing return(string.Empty); }
private void DisconnectUser(string connectionId) { if (connectionId == null) { return; } //TODO: remove user from all rooms var crc = new ConnectionRecordController(); var crrc = new ConnectionRecordRoomController(); var id = connectionId; var cr = crc.GetConnectionRecordByConnectionId(id); if (cr != null) { var roomList = Users.FindAll(c => (c.ConnectionId == connectionId)); //disconnect from each room the user was connected to foreach (UserListRecords rr in roomList) { Users.Remove(rr); Clients.Group(rr.RoomId.ToString()).newMessageNoParse(new Message { AuthorName = Localization.GetString("SystemName.Text", "~/desktopmodules/DnnChat/app_localresources/" + Localization.LocalSharedResourceFile) , AuthorUserId = -1 , ConnectionId = "0", MessageDate = DateTime.UtcNow , MessageId = -1 , MessageText = string.Format(Localization.GetString("Disconnected.Text", "~/desktopmodules/DnnChat/app_localresources/" + Localization.LocalSharedResourceFile) , cr.UserName) , RoomId = rr.RoomId }); //Clients.Group(rr.RoomId.ToString()).updateUserList(Users.FindAll(c => (c.RoomId == rr.RoomId))); Clients.Group(rr.RoomId.ToString()).updateUserList(Users.FindAll(uc => (uc.RoomId == rr.RoomId)), rr.RoomId); } //disconnect the connectionrecord cr.DisConnectedDate = DateTime.UtcNow; crc.UpdateConnectionRecord(cr); } }