private void SetConnection(ConnectionInfo connectionInfo) { using (var db = new LicensingEntities()) { Guid ConnectionID = Guid.Parse(connectionInfo.ConnectionId); var users = db.User.Where(f => f.UserName == connectionInfo.UserName); if (users.Count() == 0) { int Isrole; if (!int.TryParse(connectionInfo.Role, out Isrole)) { Isrole = 1; } var user = new User { ID = Guid.NewGuid(), UserName = connectionInfo.UserName, Company = connectionInfo.Company, ProjectType = connectionInfo.ProjectType, Role = Isrole, LastActivity = connectionInfo.CurrentDateTime }; db.User.Add(user); } else { var user = users.First(); user.LastActivity = DateTime.UtcNow; } var _connections = db.Connection.Where(con => con.ConnectionID == ConnectionID); if (_connections.Count() == 0) { CreateConnection(connectionInfo); } var _waitConnection = db.WaitConnection.Where(waitCon => waitCon.ConnectionID == ConnectionID); if(_waitConnection.Count() > 0) { var waitConnectionItem = _waitConnection.First(); waitConnectionItem.IsLicense = true; } db.SaveChanges(); } }
public void OnDisConnection(string ConnectionId, string UserName, DateTime currentDateTime, bool stopCall) { logWrite(ConnectionId, "DisConnection Start"); var ConnectionID = Guid.Parse(ConnectionId); using (var db = new LicensingEntities()) { var users = db.User.Where(f => f.UserName == UserName); if (users.Count() > 0) { var user = users.First(); user.LastActivity = currentDateTime; } var _connections = db.Connection.Where(con => con.ConnectionID == ConnectionID); if (_connections.Count() > 0) { var _connection = _connections.First(); _connection.Status = (int)ConnectionStatus.OnDisConnected; _connection.LastActivity = currentDateTime; _connection.StopCalled = stopCall; _connection.DisConnectedDateTime = currentDateTime; //if (stopCall) //{ // _connection.DisConnectedDateTime = currentDateTime.AddSeconds(110); //} //else //{ // //110초 더하는건 생각해보자 // _connection.DisConnectedDateTime = currentDateTime; //} } var _waitConnection = db.WaitConnection.Where(waitCon => waitCon.ConnectionID == ConnectionID); if (_waitConnection.Count() > 0) { var waitConnectionItem = _waitConnection.First(); waitConnectionItem.Status = (int)ConnectionStatus.OnDisConnected; waitConnectionItem.LastActivity = currentDateTime; waitConnectionItem.StopCalled = stopCall; waitConnectionItem.DisConnectedDateTime = currentDateTime; } db.SaveChanges(); } Clients.Group(((int)Role.manager).ToString()).DisConnection(ConnectionId); logWrite(ConnectionId, "DisConnection End"); }
//라이센스 획득 구문 private void GetLicense(ConnectionInfo connectionInfo) { using (var db = new LicensingEntities()) { var licenseCompanys = db.LicenseCompany.Where(LC => LC.Company.ToLower() == connectionInfo.Company.ToLower() && LC.ProjectType.ToLower() == connectionInfo.ProjectType.ToLower()); if (licenseCompanys.Count() > 0) { var Companys = licenseCompanys.First(); //현재 라이센스 유저 수를 가져와서 var licenseUsers = db.Connection.Where(li => li.ConnectedDateTime <= connectionInfo.CurrentDateTime && li.DisConnectedDateTime.HasValue == false && li.StopCalled.HasValue == false && li.Company.ToLower() == connectionInfo.Company.ToLower() && li.ProjectType.ToLower() == connectionInfo.ProjectType.ToLower()).ToList(); IEnumerable<Connection> licenseCount =licenseUsers.Distinct(new ConnectionComparer()); int currentLicense = licenseCount.Count(); //라이센스 업데이트 구문 if (Companys.LicenseMaxium > currentLicense) { logWrite(connectionInfo.ConnectionId, "현재 라이센스 개수" + currentLicense.ToString()); joinLicense(connectionInfo.ConnectionId); SetConnection(connectionInfo); } else { var connectionId = Guid.Parse(connectionInfo.ConnectionId); var WaitConnection = db.WaitConnection.Where(waitItem => waitItem.ConnectionID == connectionId); if(WaitConnection.Count() > 0) { var waitConnectionItem = WaitConnection.First(); waitConnectionItem.LastActivity = connectionInfo.CurrentDateTime; db.SaveChanges(); } else { CreateWaitConnection(connectionInfo); } //라이센스가 꽉찼을 경우 대기를 해야한다. if (Companys.LicenseMaxium == 0) { fullLicense(connectionInfo.ConnectionId, "License 적용되지않았습니다."); } else { fullLicense(connectionInfo.ConnectionId, "현재 라이센스가 꽉 찼습니다."); } } } else { logWrite(connectionInfo.ConnectionId, "라이센스 정보가 없습니다."); } } }
private void CreateWaitConnection(ConnectionInfo connectionInfo) { using (var db = new LicensingEntities()) { db.WaitConnection.Add(new WaitConnection() { ConnectionID = Guid.Parse(connectionInfo.ConnectionId), UserAgent = (connectionInfo.UserAgent != null ? connectionInfo.UserAgent : string.Empty), Company = connectionInfo.Company, ProjectType = connectionInfo.ProjectType, IsLicense = false, ConnectedDateTime = connectionInfo.CurrentDateTime, Transport = connectionInfo.Transport, LastActivity = connectionInfo.CurrentDateTime, UserName = connectionInfo.UserName, ExtensionV1 = connectionInfo.ExtensionV1, ExtensionV2 = connectionInfo.ExtensionV2, Status = connectionInfo.Status }); db.SaveChanges(); } }
private void CreateConnection(ConnectionInfo connectionInfo) { logWrite(connectionInfo.ConnectionId, "Connection 생성 중입니다."); using (var db = new LicensingEntities()) { var _connection = new Connection { ConnectionID = Guid.Parse(connectionInfo.ConnectionId), UserAgent = (connectionInfo.UserAgent != null ? connectionInfo.UserAgent : string.Empty), Company = connectionInfo.Company, ProjectType = connectionInfo.ProjectType, ConnectedDateTime = connectionInfo.CurrentDateTime, Transport = connectionInfo.Transport, LastActivity = connectionInfo.CurrentDateTime, UserName = connectionInfo.UserName, ExtensionV1 = connectionInfo.ExtensionV1, ExtensionV2 = connectionInfo.ExtensionV2, Status = connectionInfo.Status }; db.Connection.Add(_connection); db.SaveChanges(); } }
private void SetReConnection(ConnectionInfo reConnectionInfo) { Guid ConnectionID = Guid.Parse(reConnectionInfo.ConnectionId); using (var db = new LicensingEntities()) { var users = db.User.Where(f => f.UserName == reConnectionInfo.UserName); if (users.Count() > 0) { var user = users.First(); user.LastActivity = reConnectionInfo.CurrentDateTime; } else { var user = new User { ID = Guid.NewGuid(), UserName = reConnectionInfo.UserName, Company = reConnectionInfo.Company, ProjectType = reConnectionInfo.ProjectType, Role = 1, LastActivity = reConnectionInfo.CurrentDateTime }; db.User.Add(user); } var _connections = db.Connection.Where(con => con.ConnectionID == ConnectionID); if (_connections.Count() > 0) { var _connection = _connections.First(); _connection.ReConnectedDateTime = reConnectionInfo.CurrentDateTime; _connection.LastActivity = reConnectionInfo.CurrentDateTime; _connection.Status = (int)ConnectionStatus.OnReConnected; } else { CreateConnection(reConnectionInfo); } var _waitConnection = db.WaitConnection.Where(waitCon => waitCon.ConnectionID == ConnectionID); if (_waitConnection.Count() > 0) { var waitConnectionItem = _waitConnection.First(); waitConnectionItem.ReConnectedDateTime = reConnectionInfo.CurrentDateTime; waitConnectionItem.LastActivity = reConnectionInfo.CurrentDateTime; waitConnectionItem.Status = (int)ConnectionStatus.OnReConnected; waitConnectionItem.IsLicense = true; } db.SaveChanges(); } }