public void Send <I, O>(string service, string method, I payload, ClientTransportCallback <O> callback, C ctx) { #if !UNITY_EDITOR if (CoroutineProcessor == null) { callback.Failure( new TransportException( "UnityTransport requires a coroutine processor to be present before any requests can be executed.") ); return; } #endif try { #if !UNITY_EDITOR CoroutineProcessor(ProcessRequest(PrepareRequest(service, method, payload), callback)); #else ProcessRequest(PrepareRequest(service, method, payload), callback); #endif } catch (Exception ex) { callback.Failure( new TransportException(string.Format("Unexpected exception {0}\n{1}", ex.Message, ex.StackTrace)) ); } }
protected void ProcessRequest <T>(UnityWebRequest request, ClientTransportCallback <T> callback) { Wait(() => !request.isDone, () => { if (request.isError) { callback.Failure(new TransportException("Request failed: " + request.error)); return; } ProcessResponse(request.downloadHandler.text, request.GetResponseHeaders(), callback); }); request.Send(); }
protected IEnumerator ProcessRequest <O>(UnityWebRequest req, ClientTransportCallback <O> callback) { ActiveRequests++; yield return(req.Send()); ActiveRequests--; if (req.isError) { callback.Failure(new TransportException("Request failed: " + req.error)); yield break; } ProcessResponse(req.downloadHandler.text, req.GetResponseHeaders(), callback); }
protected void ProcessResponse <O>(string text, Dictionary <string, string> headers, ClientTransportCallback <O> callback) { try { if (string.IsNullOrEmpty(text)) { throw new TransportException("Empty response."); } var data = Marshaller.Unmarshal <O>(text); callback.Success(data); } catch (Exception ex) { callback.Failure( new TransportException(string.Format("Unexpected exception {0}\n{1}", ex.Message, ex.StackTrace)) ); } }