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