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);
}
}
}