// // OVERRIDES public override Task OnConnected() { // Add your own code here. // For example: in a chat application, record the association between // the current connection ID and user name, and mark the user as online. // After the code in this method completes, the client is informed that // the connection is established; for example, in a JavaScript client, // the start().done callback is executed. var version = Context.QueryString["version"]; if (version != "1.0") { Clients.Caller.notifyWrongVersion(); } var name = Context.User.Identity.Name; // create using (var db = new UserContext()) { var user = db.Users .Include(u => u.Connections) .SingleOrDefault(u => u.UserName == name); if (user == null) { user = new User { UserName = name, Connections = new List<Connection>() }; db.Users.Add(user); } user.Connections.Add(new Connection { ConnectionId = Context.ConnectionId, UserAgent = Context.Request.Headers["User-Agent"], Connected = true }); db.SaveChanges(); } Connections.Add(name, Context.ConnectionId); return base.OnConnected(); }
public override Task OnDisconnected() { var name = Context.User.Identity.Name; using (var db = new UserContext()) { var connection = db.Connections.Find(Context.ConnectionId); connection.Connected = false; db.SaveChanges(); } Connections.Remove(name, Context.ConnectionId); return base.OnDisconnected(); }