Example #1
0
        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);
        }
Example #2
0
 public SingleSocketAction(ISingleSocketRequest socketRequest) : base((SocketRequest)socketRequest)
 {
 }