| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | using System;using System.Collections.Generic;using Fort23.Core;using Fort23.UTool;using NetClientCore.TCP;using NetCore;using NetCore.ContentParse;using NetCore.Protocol;using NetCore.Protocol.MemoryPack;using Protocol.MemoryPack.MemoryMessage;using Protocol.Protocol.MemoryPack.MemoryMessage;using Utility;namespace GameLogic.NetworkClient{    public class GameNetworkClient : Singleton<GameNetworkClient>, ILogicalParsing    {        private IConnection _connection;        private Queue<SendRequestBuffer> _sendRequestBuffers = new Queue<SendRequestBuffer>();        private SendRequestBuffer _currSendRequestBuffer;        private Queue<MemoryResponse> _acceptRequestBuffers = new Queue<MemoryResponse>();        public async CTask Connect(string ip, int port)        {            TCPClient<ByteParse, ClientMemoryWrap> tcpClient = new TCPClient<ByteParse, ClientMemoryWrap>();            await tcpClient.Connect(ip, port, this);            _connection = tcpClient;            StaticUpdater.Instance.AddRenderUpdateCallBack(Update);        }        public void Logic(object data, IConnection iConnection)        {            var memoryResponse = data as MemoryResponse;            _acceptRequestBuffers.Enqueue(memoryResponse);        }        public void SendToServer(SendRequestBuffer sendRequestBuffer)        {            if (_currSendRequestBuffer == null)            {                Send(sendRequestBuffer);            }            else            {                _sendRequestBuffers.Enqueue(sendRequestBuffer);            }        }        private void Send(SendRequestBuffer sendRequestBuffer)        {            _currSendRequestBuffer = sendRequestBuffer;            _connection.SendData(sendRequestBuffer.MemoryRequest);        }        public void Update()        {            if (_currSendRequestBuffer == null && _sendRequestBuffers.Count > 0)            {                _currSendRequestBuffer = _sendRequestBuffers.Dequeue();                Send(_currSendRequestBuffer);            }                        while (_acceptRequestBuffers.Count > 0)            {                var memoryResponse = _acceptRequestBuffers.Dequeue();                if (memoryResponse.RespomseType == RespomseType.Respomse)                {                    try                    {                        if (_currSendRequestBuffer != null&&memoryResponse.GameSendType==_currSendRequestBuffer.MemoryRequest.GameSendType)                        {                            SendRequestBuffer sendRequestBuffer = _currSendRequestBuffer;                            _currSendRequestBuffer = null;                            sendRequestBuffer.callBack?.Invoke(memoryResponse);                        }                    }                    catch (Exception e)                    {                       LogTool.Error(e);                    }                }            }                    }        protected override void ProDispose()        {            _currSendRequestBuffer = null;            _sendRequestBuffers.Clear();            StaticUpdater.Instance.RemoveRenderUpdateCallBack(Update);            _connection.Dispose();        }        public void AddConnection(IConnection iConnection)        {        }        public void RemoveConnection(IConnection iConnection)        {        }    }}
 |