public async Task <TResponseResult> DoRequest <TResponseResult>(ISingleSocketRequest socketRequest, Action errorCallback = null) where TResponseResult : class { await Connect(); SocketResponse <TResponseResult> socketResponse = null; var responseReceived = false; socketRequest.Id = _idGenerator.CreateId(); var socketAction = new SingleSocketAction(socketRequest); socketAction.ResponseReceived += (o, e) => { socketResponse = ApiExtensions.DecodeSocketResponse <TResponseResult>(e.Message); responseReceived = true; }; socketAction.ErrorReceived += (o, e) => { errorCallback?.Invoke(); }; RunAction(socketAction); if (!socketRequest.NeedResponse) { return(Activator.CreateInstance <TResponseResult>()); } while (!responseReceived) { await Task.Delay(50); } if (socketResponse?.ErrorData != null) { throw new ConnectorException($"{socketResponse?.ErrorData.Message}. {socketResponse?.ErrorData.Description}"); } return(socketResponse?.ResponseData); }
public SingleSocketAction(ISingleSocketRequest socketRequest) : base((SocketRequest)socketRequest) { }