using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json.Serialization; using Newtonsoft.Json; using langguanApi.Extensions.AutoDI; namespace langguanApi.Common.WebSocket { /// /// socket /// [ServiceInjection(InjectionType.Singleton)] public class SocketHub : Hub { /// /// // 客户端连接事件 /// /// public override async Task OnConnectedAsync() { var msg = JsonConvert.SerializeObject(new { msgType = "info", data = "hello" }); // 发送消息给连接的客户端 await Clients.Caller.SendAsync("ReceiveMessage", msg); await base.OnConnectedAsync(); } /// /// // 自定义方法,用于向客户端推送消息 /// /// /// public async Task SendMessageToClient(object message) { // 发送消息给所有客户端 var connId = this.Context.ConnectionId; var msg = JsonConvert.SerializeObject(message); await this.Clients.All.SendAsync("ReceiveMessage", msg); } /// /// 向指定用户发送 /// /// /// /// public async Task SendMessageToUser(string user, object message) { var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }; var msg = JsonConvert.SerializeObject(message, settings); await Clients.All.SendAsync("ReceiveMessage", user, msg); } } }