using Microsoft.AspNet.SignalR; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Threading.Tasks; using System.Web; using VueWebApi.Models; using VueWebApi.Tools; namespace VueWebApi.Hubs { public class ChatHub2 : Hub { /// < summary> /// /// public static List Users = new List(); /// /// 未连接事件 /// /// public override Task OnConnected() { LogHelper.WriteLogData("执行OnConnected"); string clientId = GetClientId(); if (Users.IndexOf(clientId) == -1) { Users.Add(clientId); } Send(Users.Count); var context = GlobalHost.ConnectionManager.GetHubContext(); context.Clients.Client(clientId).updateUserName(clientId); return base.OnConnected(); } /// /// 重新连接事件 /// /// public override Task OnReconnected() { LogHelper.WriteLogData("执行OnReconnected"); string clientId = GetClientId(); if (Users.IndexOf(clientId) == -1) { Users.Add(clientId); } Send(Users.Count); return base.OnReconnected(); } /// /// 断开连接事件 /// /// /// public override Task OnDisconnected(bool stopCalled) { LogHelper.WriteLogData("执行OnDisconnected"); string clientId = GetClientId(); if (Users.IndexOf(clientId) > -1) { Users.Remove(clientId); } Send(Users.Count); return base.OnDisconnected(stopCalled); } /// /// 这对于每个客户端都是唯一的,用于标识连接。 /// /// private string GetClientId() { string clientId = ""; //从应用程序传递的客户ID if (Context.QueryString["clientId"] != null) { clientId = this.Context.QueryString["clientId"]; } if (string.IsNullOrEmpty(clientId.Trim())) { clientId = Context.ConnectionId; } LogHelper.WriteLogData("执行1:" + clientId); return clientId; } /// /// Sends the update user count to the listening view. /// /// /// The count. /// public void Send(int count) { LogHelper.WriteLogData("执行count:" + count); // Call the addNewMessageToPage method to update clients. var context = GlobalHost.ConnectionManager.GetHubContext(); context.Clients.All.updateUsersOnlineCount(count); } /// /// 自己写的一个服务端方法Hello. /// /// 参数 /// public void Hello(string msg) { LogHelper.WriteLogData("执行msg:" + msg); var context = GlobalHost.ConnectionManager.GetHubContext(); context.Clients.All.clientMethod("server:" + msg); } } }