using Microsoft.Extensions.Logging;
using System;
using System.Text;
using TouchSocket.Core;
using TouchSocket.Sockets;

namespace SlnMesnac.TouchSocket
{
    public class TcpServer
    {
        private ILogger<TcpServer> _logger;
        private readonly TcpService _service;

        public TcpServer(ILogger<TcpServer> logger,TcpService tcpService)
        {
            _logger = logger;
            _service = tcpService;
        }

        public void Init(int serverPort)
        {
            try
            {
                _service.Connecting = (client, e) => {  
                    _logger.LogInformation($"客户端{client.IP}正在接入服务");
                };
                _service.Connected = (client, e) => {   
                    _logger.LogInformation($"客户端{client.IP}接入服务成功，Id：{client.ID}");
                };
                _service.Disconnected = (client, e) => { 
                    _logger.LogInformation($"客户端{client.IP}断开连接，Id：{client.ID}");
                };
                _service.Received = (client, byteBlock, requestInfo) =>
                {
                    //if (requestInfo is MyFixedHeaderRequestInfo myRequestInfo)
                    //{
                    //    string body = Encoding.UTF8.GetString(myRequestInfo.Body, 0, myRequestInfo.Body.Length);
                    //}
                };

                _service.Setup(new TouchSocketConfig()//载入配置     
                    .SetListenIPHosts(new IPHost[] { new IPHost($"0.0.0.0:{serverPort}") })
                    .ConfigureContainer(a =>//容器的配置顺序应该在最前面
                    {
                        a.AddConsoleLogger();
                    })
                    .ConfigurePlugins(a =>
                    {
                        //自定义插件
                    }))
                    .Start();
                _logger.LogInformation($"TcpServer启动成功，监听端口：{serverPort}");
            }
            catch (Exception ex)
            {
                _logger.LogError($"TcpServer启动异常：{ex}");
                throw new Exception(ex.Message);
            }

        }
    }
}
