//using CrazyStudio.Core.Common.Adapters;
//using CrazyStudio.Core.Common.Tools.Extensions;
//using Microsoft.Extensions.Configuration;
//using Microsoft.Extensions.DependencyInjection;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Security.Authentication;
//using System.Security.Cryptography.X509Certificates;
//using System.Text;
//using System.Threading.Tasks;
//using TouchSocket.Core;
//using TouchSocket.Http;
//using TouchSocket.Rpc;
//using TouchSocket.Sockets;

//namespace CrazyStudio.Core.Common.Tools.Extensions
//{
//    public static class TouchSocketExtension
//    {
//        /// <summary>
//        /// 添加TouchSocket WebSocket服务
//        /// </summary>
//        /// <param name="services"></param>
//        /// <param name="configuration"></param>
//        public static async Task AddWebSocketServer(this IServiceCollection services, IConfiguration configuration, ushort listenPort, List<Type> plugins, List<Type> rpcServers)
//        {
//            var service = new HttpService();

//            var config = new TouchSocketConfig();
//            config
//                //.SetServiceSslOption(new ServiceSslOption() //Ssl配置，当为null的时候，相当于创建了ws服务器，当赋值的时候，相当于wss服务器。
//                //{
//                //    Certificate = new X509Certificate2("RRQMSocket.pfx", "RRQMSocket"),
//                //    SslProtocols = SslProtocols.Tls12
//                //})
//                //, new IPHost(IPAddress.Loopback, listenPort)
//                .SetListenIPHosts(new IPHost(listenPort)).ConfigureContainer(a =>
//                {
//                    ////a.AddConsoleLogger();
//                    //a.AddRpcStore(store =>
//                    //{
//                    //    if (rpcServers != null)
//                    //    {
//                    //        for (int i = 0; i < rpcServers.Count; i++)
//                    //        {
//                    //            store.RegisterServer(rpcServers[i]);
//                    //        }
//                    //    }
//                    //});
//                }).ConfigurePlugins(a =>
//                {
//                    a.UseWebSocket()//添加WebSocket功能
//                    //.SetVerifyConnection(VerifyConnection)
//                    .SetWSUrl("/ws")//设置url直接可以连接。
//                    .UseAutoPong();//当收到ping报文时自动回应pong

//                    a.UseWebSocketHeartbeat();

//                    if (plugins != null)
//                    {
//                        for (int i = 0; i < plugins.Count; i++)
//                        {
//                            a.Add(plugins[i]);
//                        }
//                    }
//                });
//                //.SetTcpDataHandlingAdapter(() => new FixedHeaderPackageAdapter() { FixedHeaderType = FixedHeaderType.Int, MaxPackageSize = 2048 });//设置最大包大小为10M

//            config.SetNoDelay(true);//不延迟发送数据，更加实时快速，但是不会合包
//            config.SetMaxCount(100000);//设置最大连接数为10万


//            await service.SetupAsync(config);
//            await service.StartAsync();

//            //service.Logger.Info("WebSocket服务器已启动");
//            Console.WriteLine($"WebSocket服务器已启动,端口：{listenPort}");
//        }

//        /// <summary>
//        /// 验证websocket的连接
//        /// </summary>
//        /// <param name="client"></param>
//        /// <param name="context"></param>
//        /// <returns></returns>
//        private static bool VerifyConnection(IHttpSessionClient client, HttpContext context)
//        {
//            if (!context.Request.IsUpgrade())//如果不包含升级协议的header，就直接返回false。
//            {
//                return false;
//            }
//            if (context.Request.UrlEquals("/ws"))//以此连接，则直接可以连接
//            {
//                return true;
//            }
//            else if (context.Request.UrlEquals("/wsquery"))//以此连接，则需要传入token才可以连接
//            {
//                if (context.Request.Query.Get("token") == "123456")
//                {
//                    return true;
//                }
//                else
//                {
//                    context.Response
//                        .SetStatus(403, "token不正确")
//                        .AnswerAsync();
//                }
//            }
//            else if (context.Request.UrlEquals("/wsheader"))//以此连接，则需要从header传入token才可以连接
//            {
//                if (context.Request.Headers.Get("token") == "123456")
//                {
//                    return true;
//                }
//                else
//                {
//                    context.Response
//                        .SetStatus(403, "token不正确")
//                        .AnswerAsync();
//                }
//            }
//            return false;
//        }
//    }
//}
