public override Task OnConnected() { var name = LOGIN_ACCOUNT; using (var db = new SignalR_MapUsersModel()) { var user = db.Users .Include(u => u.Connections) .SingleOrDefault(u => u.UserName == name); if (user == null) { user = new User { UserName = name, CreateTime = DateTime.Now, Connections = new List <Connection>() }; db.Users.Add(user); } user.Connections.Add(new Connection { ConnectionID = Context.ConnectionId, UserAgent = Context.Request.Headers["User-Agent"], CreateTime = DateTime.Now, UpdateTime = DateTime.Now, Connected = true }); db.SaveChanges(); } Base_Online(); return(base.OnConnected()); }
/// <summary> /// 检测断开原因 /// </summary> /// <param name="stopCalled"></param> /// <returns></returns> public override Task OnDisconnected(bool stopCalled) { if (stopCalled) { Console.WriteLine(String.Format("Client {0} explicitly closed the connection.", Context.ConnectionId)); } else { Console.WriteLine(String.Format("Client {0} timed out .", Context.ConnectionId)); } using (var db = new SignalR_MapUsersModel()) { var connection = db.Connections.Find(Context.ConnectionId); db.Connections.Remove(connection); //connection.Connected = false; //connection.UpdateTime = DateTime.Now; db.SaveChanges(); } Base_Offline(); return(base.OnDisconnected(stopCalled)); }