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