54 lines
1.8 KiB
C#
54 lines
1.8 KiB
C#
using Microsoft.AspNetCore.SignalR;
|
|
using Newtonsoft.Json.Serialization;
|
|
using Newtonsoft.Json;
|
|
using langguanApi.Extensions.AutoDI;
|
|
|
|
namespace langguanApi.Common.WebSocket
|
|
{
|
|
/// <summary>
|
|
/// socket
|
|
/// </summary>
|
|
[ServiceInjection(InjectionType.Singleton)]
|
|
public class SocketHub : Hub
|
|
{
|
|
/// <summary>
|
|
/// // 客户端连接事件
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public override async Task OnConnectedAsync()
|
|
{
|
|
var msg = JsonConvert.SerializeObject(new { msgType = "info", data = "hello" });
|
|
// 发送消息给连接的客户端
|
|
await Clients.Caller.SendAsync("ReceiveMessage", msg);
|
|
await base.OnConnectedAsync();
|
|
}
|
|
/// <summary>
|
|
/// // 自定义方法,用于向客户端推送消息
|
|
/// </summary>
|
|
/// <param name="message"></param>
|
|
/// <returns></returns>
|
|
public async Task SendMessageToClient(object message)
|
|
{
|
|
// 发送消息给所有客户端
|
|
var connId = this.Context.ConnectionId;
|
|
var msg = JsonConvert.SerializeObject(message);
|
|
await this.Clients.All.SendAsync("ReceiveMessage", msg);
|
|
}
|
|
/// <summary>
|
|
/// 向指定用户发送
|
|
/// </summary>
|
|
/// <param name="user"></param>
|
|
/// <param name="message"></param>
|
|
/// <returns></returns>
|
|
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);
|
|
}
|
|
}
|
|
}
|