Eabei.GoBangGame/Eabei.GoBangService/TcpServerManager.cs

(开头部分) 3KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using Eabei.Common.EventBus;
using Eabei.GoBangService.Data;
using Eabei.Model;
using Eabei.Model.EventParam;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace Eabei.GoBangService
{
    /// <summary>
    /// TCP网络通信管理类
    /// </summary>
    public class TcpServerManager : Common.SingleInstance<TcpServerManager>
    {
        private Net.TcpService? tcpService;

        private ConcurrentDictionary<string, TcpClient> tcpClientList = new();
        private int playerIndex = 0;

        public void Start(string host, int port)
        {
            if (tcpService is null)
            {
                tcpService = new Net.TcpService(IPAddress.Parse(host), port);
                tcpService.DataReceivedHandle += TcpService_DataReceivedHandle;
                tcpService.ClientConnectionHandle += TcpService_ClientConnectionHandle;
                tcpService.ClientDisConnectionHandle += TcpService_ClientDisConnectionHandle;
                tcpService.Start();
                Console.WriteLine($"服务已开启: {host}:{port}");
            }
        }

        private void TcpService_ClientDisConnectionHandle(object? sender, Net.CloseEventArgs e)
        {
            if (tcpClientList.TryRemove(e.Name, out TcpClient? _))
            {
                var pairung = DataManager.Instance.GetPairungList().FirstOrDefault(q => q.user1.Name == e.Name || q.user2.Name == e.Name);
                if (pairung.user1 is not null && pairung.user2 is not null)
                {
                    if (pairung.user1.Name == e.Name)
                        Global.Instance.EventManager.Publish(new EventServerDataResult() { DataHeader = DataHeaderInfo.Message, Data = new object[] { pairung.user2.Name, "对手悄悄咪咪滴就跑了, 没留下一片云彩!" } });
                    else
                        Global.Instance.EventManager.Publish(new EventServerDataResult() { DataHeader = DataHeaderInfo.Message, Data = new object[] { pairung.user1.Name, "对手悄悄咪咪滴就跑了, 没留下一片云彩!" } });
                    DataManager.Instance.GetPairungList().Remove(pairung);
                }
            }
            Console.WriteLine($"客户端: {e.Name} 已断开!");
        }

        private void TcpService_ClientConnectionHandle(object? sender, Net.ConnectionEventArgs e)
        {
            tcpClientList.TryAdd(e.Name, e.TcpClient);
            Console.WriteLine($"客户端{e.Name} 已连接!");

后面还有 32 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。