public void Dispose() { WrappedSocketsMap.Clear(); IdentitySocketsMap.Clear(); IdentityConnectionSocketsMap.Clear(); StoredResponses.Clear(); StopProtocolJobs(); socket?.Dispose(); socket = null; }
public Message Request(Message msg, int millisecondsTimeout = 500) { if (socket == null) { var errorPackage = new Message(); errorPackage.Success = false; return(errorPackage); } var msgId = GenerateStoredAwaiter(); var responseAwaiter = StoredResponses[msgId]; var envelop = new Envelope(msg); envelop.Append(RequestProtocol.Command); envelop.Append(msgId); var networkSuccess = socket.Send(envelop.ToByteArray()); var msgReceived = responseAwaiter.Signal.Wait(millisecondsTimeout); if (networkSuccess && msgReceived) { var dataEnvelop = responseAwaiter.Data.GetMessage(); dataEnvelop.Success = true; StoredResponses.Remove(msgId); return(dataEnvelop); } else { var errorPackage = new Message(); errorPackage.Success = false; return(errorPackage); } }