using System.Collections.Concurrent; using NetCore; using NetCore.Protocol.MemoryPack; namespace NetServer.InternalServer; public class SendInternalServerManager { public class ResponeseCallBack { public long sendCount; public long sendTime; public System.Action callBack; } public static SendInternalServerManager Instance { get { if (_sendInternalServerManager == null) { _sendInternalServerManager = new SendInternalServerManager(); } return _sendInternalServerManager; } } public static SendInternalServerManager _sendInternalServerManager; private long sendCount; private ConcurrentDictionary _responeseCallBacks = new ConcurrentDictionary(); public void NoticeResponeseCallBack(InternalMemoryRequst internalMemoryRequst) { if (_responeseCallBacks.Remove(internalMemoryRequst.ResponeseSendSequence, out ResponeseCallBack callBack)) { callBack.callBack?.Invoke(internalMemoryRequst); } } public void SendInternalServer(ServerType serverType, InternalMemoryResponese internalMemoryResponese, System.Action callBack) { long currSendCount = sendCount++; ResponeseCallBack responeseCallBack = new ResponeseCallBack(); responeseCallBack.sendTime = System.DateTime.Now.Ticks; responeseCallBack.sendCount= currSendCount; responeseCallBack.callBack= callBack; internalMemoryResponese.sendSequence = currSendCount; _responeseCallBacks.TryAdd(currSendCount, responeseCallBack); IConnection connection= ServerLinkMnager.Instance.GetServerConnection(serverType); connection.SendData(internalMemoryResponese); } }