예제 #1
0
        private static void GetRequestStreamCallback <T>(IAsyncResult asynchronousResult)
        {
            RequestState <T> requestState = (RequestState <T>)asynchronousResult.AsyncState;

            try
            {
                HttpWebRequest request           = requestState.Request;
                string         requestJsonString = requestState.RequestJsonString;

                // Request Data
                using (Stream requestStream = request.EndGetRequestStream(asynchronousResult))
                {
                    using (StreamWriter requestWriter = new StreamWriter(requestStream, System.Text.Encoding.UTF8))
                        requestWriter.Write(requestJsonString);
                }

                request.BeginGetResponse(new AsyncCallback(GetResponseCallback <T>), requestState);
            }
            catch (System.Exception ex)
            {
                BackendlessFault backendlessFault = new BackendlessFault(ex.Message);
                if (requestState.Callback != null)
                {
                    requestState.Callback.ErrorHandler.Invoke(backendlessFault);
                }
            }
        }
예제 #2
0
        public static void InvokeAsync <T>(Api api, object[] args, AsyncCallback <T> callback)
        {
            Method method = Method.UNKNOWN;
            string url    = null;
            Dictionary <string, string> headers = null;
            object data = null;

            if (args != null && args.Length > 0)
            {
                data = args[0];
            }

            try
            {
                GetRestApiRequestCommand(api, args, out method, out url, out headers);
                InvokeAsync <T>(api, method, url, headers, data, callback);
            }
            catch (BackendlessException ex)
            {
                BackendlessFault backendlessFault = new BackendlessFault(ex);
                if (callback != null)
                {
                    callback.ErrorHandler.Invoke(backendlessFault);
                }
                else
                {
                    throw new BackendlessException(backendlessFault);
                }
            }
        }
예제 #3
0
        public void Logout()
        {
            try
            {
                Invoker.InvokeSync <object>(USER_MANAGER_SERVER_ALIAS, "logout",
                                            new object[] { });
            }
            catch (BackendlessException exception)
            {
                BackendlessFault fault = exception.BackendlessFault;

                if (fault != null)
                {
                    int faultCode = int.Parse(fault.FaultCode);

                    if (faultCode != 3064 && faultCode != 3091 && faultCode != 3090 && faultCode != 3023)
                    {
                        throw exception;
                    }
                }
            }

            CurrentUser = null;
            HeadersManager.GetInstance().RemoveHeader(HeadersEnum.USER_TOKEN_KEY);
            LoginStorage.DeleteFiles();
        }
예제 #4
0
        public void UnlatchWith(BackendlessFault backendlessFault)
        {
            testFault = backendlessFault;

            for (int i = 0; i < testLatch.CurrentCount; i++)
            {
                testLatch.Signal();
            }
        }
예제 #5
0
        public static void InvokeAsync <T>(Api api, Method method, string url, Dictionary <string, string> headers, object data, AsyncCallback <T> callback)
        {
            RequestState <T> requestState = new RequestState <T>();

            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

                // Set method
                request.Method = method.ToString();

                // Set Headers
                foreach (KeyValuePair <string, string> header in headers)
                {
                    request.Headers.Add(header.Key, header.Value);
                }

                requestState.Request  = request;
                requestState.Callback = callback;
                requestState.Api      = api;

                if (method == Method.GET || data == null)
                {
                    request.BeginGetResponse(new AsyncCallback(GetResponseCallback <T>), requestState);
                }
                else
                {
                    // Convert Data to Json
                    string requestJsonString = JsonMapper.ToJson(data);

                    // Set ContentType, ContentLength
                    request.ContentType = "application/json";
                    //request.ContentLength = requestJsonString.Length;

                    requestState.RequestJsonString = requestJsonString;

                    request.BeginGetRequestStream(new System.AsyncCallback(GetRequestStreamCallback <T>), requestState);
                }
            }
            catch (System.Exception ex)
            {
                BackendlessFault backendlessFault = new BackendlessFault(ex);
                if (requestState.Callback != null)
                {
                    requestState.Callback.ErrorHandler.Invoke(backendlessFault);
                }
                else
                {
                    throw new BackendlessException(backendlessFault);
                }
            }
        }
예제 #6
0
        private static void ResponseCallback(IAsyncResult asyncResult)
        {
            var asyncState = (RequestStreamAsyncState <BackendlessFile>)asyncResult.AsyncState;

            using (asyncState.Stream)
            {
                try
                {
                    using (var response = asyncState.HttpRequest.EndGetResponse(asyncResult).GetResponseStream())
                    {
                        var    encode  = System.Text.Encoding.GetEncoding("utf-8");
                        var    result  = new StreamReader(response, encode).ReadToEnd();
                        string fileUrl = "";
                        try
                        {
                            JsonData successResponse = JsonMapper.ToObject(result);
                            fileUrl = (string)successResponse["fileURL"];
                        }
                        catch (System.Exception)
                        {
                        }
                        asyncState.Callback.ResponseHandler.Invoke(new BackendlessFile(fileUrl));
                    }
                }
                catch (WebException ex)
                {
                    var response           = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
                    BackendlessFault fault = null;
                    try
                    {
                        JsonData errorResponse = JsonMapper.ToObject(response);
                        int      code          = (int)errorResponse["code"];
                        string   message       = (string)errorResponse["message"];

                        fault = new BackendlessFault(code.ToString(), message, null);
                    }
                    catch (System.Exception)
                    {
                        fault = new BackendlessFault(ex);
                    }

                    if (asyncState.Callback != null)
                    {
                        asyncState.Callback.ErrorHandler.Invoke(fault);
                    }
                    else
                    {
                        throw new BackendlessException(fault);
                    }
                }
            }
        }
예제 #7
0
        public static void InvokeAsync <T>(string className, string methodName, object[] args, bool enableUnderFlowInspection, AsyncCallback <T> callback)
        {
            var responder = new Responder <T>(response =>
            {
                if (callback != null)
                {
                    callback.ResponseHandler.Invoke(response);
                }
            }, fault =>
            {
                var backendlessFault = new BackendlessFault(fault);
                if (callback != null)
                {
                    callback.ErrorHandler.Invoke(backendlessFault);
                }
                else
                {
                    throw new BackendlessException(backendlessFault);
                }
            });

            try
            {
                ResponseThreadConfigurator responseConfig = null;

                if (enableUnderFlowInspection)
                {
                    responseConfig = new ResponseThreadConfigurator(SetupUnderFlowListener);
                }

                client.Invoke <T>(className, methodName, args, null, HeadersManager.GetInstance().Headers, responder, responseConfig);
            }
            catch (System.Exception ex)
            {
                var backendlessFault = new BackendlessFault(ex.Message);
                if (callback != null)
                {
                    callback.ErrorHandler.Invoke(backendlessFault);
                }
                throw new BackendlessException(backendlessFault);
            }
        }
예제 #8
0
        public static T InvokeSync <T>(string className, string methodName, object[] args, bool enableUnderFlowInspection)
        {
            T result = default(T);
            BackendlessFault backendlessFault = null;
            AutoResetEvent   waiter           = new AutoResetEvent(false);

            var responder = new Responder <T>(r =>
            {
                result = r;
                waiter.Set();
            }, f =>
            {
                backendlessFault = new BackendlessFault(f);
                waiter.Set();
            });

            try
            {
                ResponseThreadConfigurator responseConfig = null;

                if (enableUnderFlowInspection)
                {
                    responseConfig = new ResponseThreadConfigurator(SetupUnderFlowListener);
                }

                client.Invoke <T>(className, methodName, args, null, HeadersManager.GetInstance().Headers, responder, responseConfig);
                waiter.WaitOne(System.Threading.Timeout.Infinite);
            }
            catch (System.Exception ex)
            {
                throw new BackendlessException(ex.Message);
            }

            if (backendlessFault != null)
            {
                throw new BackendlessException(backendlessFault);
            }

            return(result);
        }
예제 #9
0
        private static void ResponseCallback(IAsyncResult asyncResult)
        {
            var asyncState = (RequestStreamAsyncState <BackendlessFile>)asyncResult.AsyncState;

            using (asyncState.FileStream)
            {
                try
                {
                    using (var response = asyncState.HttpRequest.EndGetResponse(asyncResult).GetResponseStream())
                    {
                        var encode      = Encoding.GetEncoding("utf-8");
                        var result      = new StreamReader(response, encode).ReadToEnd();
                        var matchGroups = SERVER_RESULT_REGEXP.Match(result).Groups;
                        var fileUrl     = matchGroups["fileUrl"].Value;

                        asyncState.Callback.ResponseHandler.Invoke(new BackendlessFile(fileUrl));
                    }
                }
                catch (WebException ex)
                {
                    var response    = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
                    var matchGroups = SERVER_ERROR_REGEXP.Match(response).Groups;
                    var message     = matchGroups["message"].Value;
                    var code        = matchGroups["code"].Value;
                    var fault       =
                        new BackendlessFault((string.IsNullOrEmpty(code) ? "" : "Code: " + code + "\n") + "Message: " +
                                             message);

                    if (asyncState.Callback != null)
                    {
                        asyncState.Callback.ErrorHandler.Invoke(fault);
                    }
                    else
                    {
                        throw new BackendlessException(fault);
                    }
                }
            }
        }
예제 #10
0
        private IRTRequest HandleResult <T>(Object[] args, IDictionary <String, T> requestMap, String resultKey) where T : IRTRequest
        {
            if (args == null || args.Length < 1)
            {
                Log.log(Backendless.BACKENDLESSLOG, "subscription result is null or empty");
                return(null);
            }

            AnonymousObject result = (AnonymousObject)WeborbSerializationHelper.Deserialize((byte[])args[0]);

            String id = WeborbSerializationHelper.AsString(result, "id");

            Log.log(Backendless.BACKENDLESSLOG, String.Format("Got result for subscription {0}", id));

            IRTRequest request = requestMap[id];

            if (request == null)
            {
                Log.log(Backendless.BACKENDLESSLOG, String.Format("There is no handler for subscription {0}", id));
                return(null);
            }

            Object error = WeborbSerializationHelper.AsObject(result, "error");

            if (error != null)
            {
                Log.log(Backendless.BACKENDLESSLOG, String.Format("got error {0}", error));
                BackendlessFault fault = new BackendlessFault(error.ToString());
                request.Callback.errorHandler(fault);
                return(request);
            }

            IAdaptingType data = WeborbSerializationHelper.AsAdaptingType(result, resultKey);

            request.Callback.responseHandler(data);
            return(request);
        }
예제 #11
0
        public void Logout()
        {
            try
            {
                Invoker.InvokeSync <object>(Invoker.Api.USERSERVICE_LOGOUT, null);
            }
            catch (BackendlessException exception)
            {
                BackendlessFault fault = exception.BackendlessFault;

                if (fault != null)
                {
                    int faultCode = int.Parse(fault.FaultCode);

                    if (faultCode != 3064 && faultCode != 3091 && faultCode != 3090 && faultCode != 3023)
                    {
                        throw exception;
                    }
                }
            }

            CurrentUser = null;
            HeadersManager.GetInstance().RemoveHeader(HeadersEnum.USER_TOKEN_KEY);
        }
예제 #12
0
        private async Task <BackendlessFile> RequestStreamCallbackAsync(Stream postStream,
                                                                        FileStream fileStream,
                                                                        WebRequest httpRequest,
                                                                        UploadCallback uploadCallback,
                                                                        byte[] headerBytes,
                                                                        byte[] boundaryBytes)
        {
            long fileLength = fileStream.Length;
            long offset     = 0;
            int  bufferLen  = (int)(fileLength < UPLOAD_BUFFER_DEFAULT_LENGTH ? fileLength : UPLOAD_BUFFER_DEFAULT_LENGTH);

            byte[] buffer = new byte[bufferLen];

            // send the headers
            postStream.Write(headerBytes, 0, headerBytes.Length);

            int progress = 0;
            int size     = fileStream.Read(buffer, 0, bufferLen);

            while (size > 0)
            {
                postStream.Write(buffer, 0, size);
                offset += size;

                if (!(uploadCallback is EmptyUploadCallback))
                {
                    int currentProgress = (int)((offset / fileLength) * 100);
                    if (progress != currentProgress)
                    {
                        progress = currentProgress;
                        uploadCallback.ProgressHandler.Invoke(progress);
                    }
                }

                size = fileStream.Read(buffer, 0, bufferLen);
            }

            if (!(uploadCallback is EmptyUploadCallback) && progress != 100)
            {
                uploadCallback.ProgressHandler.Invoke(100);
            }

            postStream.Write(boundaryBytes, 0, boundaryBytes.Length);
            WebResponse webResponse = await httpRequest.GetResponseAsync();

            using ( fileStream )
            {
                try
                {
                    var encode      = Encoding.GetEncoding("utf-8");
                    var result      = new StreamReader(webResponse.GetResponseStream(), encode).ReadToEnd();
                    var matchGroups = SERVER_RESULT_REGEXP.Match(result).Groups;
                    var fileUrl     = matchGroups["fileUrl"].Value;

                    return(new BackendlessFile(fileUrl));
                }
                catch (WebException ex)
                {
                    var response    = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
                    var matchGroups = SERVER_ERROR_REGEXP.Match(response).Groups;
                    var message     = matchGroups["message"].Value;
                    var code        = matchGroups["code"].Value;
                    var fault       =
                        new BackendlessFault((string.IsNullOrEmpty(code) ? "" : "Code: " + code + "\n") + "Message: " +
                                             message);

                    throw new BackendlessException(fault);
                }
            }
        }
예제 #13
0
 public override void CheckErrorCode(string expectedCode, BackendlessFault resultFault)
 {
     СheckStringExpectation(expectedCode, resultFault.Message);
     CountDown();
 }
예제 #14
0
 public override void CheckErrorCode(int expectedCode, BackendlessFault resultFault)
 {
     base.CheckErrorCode(expectedCode, resultFault);
     CountDown();
 }
예제 #15
0
 public void FailCountDownWith(BackendlessFault backendlessFault)
 {
     testFault = backendlessFault;
     testLatch.Signal();
 }
예제 #16
0
        public static void InvokeAsync <T>(Api api, Method method, string url, Dictionary <string, string> headers, object data, AsyncCallback <T> callback)
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object t)
            {
                SocketResponse response = null;

                try
                {
                    Uri uri = new Uri(url);
                    int maximumRetryCount = 5;
                    int retry             = 0;

                    while (++retry < maximumRetryCount)
                    {
                        TcpClient client = new TcpClient();
                        client.Connect(uri.Host, uri.Port);
                        using (NetworkStream stream = client.GetStream())
                        {
                            Stream ostream = stream as Stream;
                            if (uri.Scheme.ToLower() == "https")
                            {
                                ostream = new SslStream(stream, false, new RemoteCertificateValidationCallback(ValidateServerCertificate));
                                try
                                {
                                    SslStream ssl = ostream as SslStream;
                                    ssl.AuthenticateAsClient(uri.Host);
                                }
                                catch (System.Exception e)
                                {
                                    BackendlessFault backendlessFault = new BackendlessFault(e);
                                    if (callback != null)
                                    {
                                        callback.ErrorHandler.Invoke(backendlessFault);
                                    }
                                }
                            }

                            WriteToStream(method, uri, headers, data, ostream);
                            response = new SocketResponse();
                            response.ReadFromStream(ostream);
                        }
                        client.Close();

                        switch (response.status)
                        {
                        case 307:
                        case 302:
                        case 301:
                            uri = new Uri(response.GetHeader("Location"));
                            continue;

                        default:
                            retry = maximumRetryCount;
                            break;
                        }
                    }
                }
                catch (System.Exception ex)
                {
                    BackendlessFault backendlessFault = new BackendlessFault(ex);
                    if (callback != null)
                    {
                        callback.ErrorHandler.Invoke(backendlessFault);
                    }
                }

                if (response.status == 200)
                {
                    T result = default(T);
                    string responseJsonString = response.response;
                    if ((api >= Api.COUNTERSERVICE_GET && api <= Api.COUNTERSERVICE_COM_SET) || api == Api.CACHESERVICE_CONTAINS)
                    {
                        result = (T)Convert.ChangeType(responseJsonString, typeof(T));
                    }
                    else
                    {
                        if (string.IsNullOrEmpty(responseJsonString) == false)
                        {
                            result = JsonMapper.ToObject <T>(responseJsonString);
                        }
                    }

                    if (callback != null)
                    {
                        callback.ResponseHandler.Invoke(result);
                    }
                }
                else
                {
                    BackendlessFault fault = null;

                    try
                    {
                        JsonData errorResponse = JsonMapper.ToObject(response.response);
                        int code       = (int)errorResponse["code"];
                        string message = (string)errorResponse["message"];

                        fault = new BackendlessFault(code.ToString(), message, null);
                    }
                    catch (System.Exception ex)
                    {
                        fault = new BackendlessFault(ex);
                    }

                    if (callback != null)
                    {
                        callback.ErrorHandler.Invoke(fault);
                    }
                }
            }));
        }
예제 #17
0
 public void FailCountDownWith(string message)
 {
     testFault = new BackendlessFault(message);
     testLatch.Signal();
 }
예제 #18
0
 public void FailCountDownWith(System.Exception e)
 {
     testFault = new BackendlessFault(e.Message);
     testLatch.Signal();
 }
예제 #19
0
 private void errorHandler(BackendlessFault fault)
 {
     Toast.MakeText(this, "error registering", ToastLength.Short);
 }
예제 #20
0
 public void SetLatch(int count)
 {
     testLatch = new CountdownEvent(count);
     testFault = null;
 }
예제 #21
0
        public static T InvokeSync <T>(Api api, Method method, string url, Dictionary <string, string> headers, object data)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

                // Set method
                request.Method = method.ToString();

                // Set Headers
                foreach (KeyValuePair <string, string> header in headers)
                {
                    request.Headers.Add(header.Key, header.Value);
                }

                // Convert Data to Json
                if (method == Method.GET || data == null)
                {
                }
                else
                {
                    string requestJsonString = JsonMapper.ToJson(data);

                    // Set ContentType, ContentLength
                    request.ContentType = "application/json";
                    //request.ContentLength = requestJsonString.Length;

                    // Request Data
                    using (Stream requestStream = request.GetRequestStream())
                    {
                        using (StreamWriter requestWriter = new StreamWriter(requestStream, System.Text.Encoding.UTF8))
                            requestWriter.Write(requestJsonString);
                    }
                }

                // Response Data
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                using (Stream responseStream = response.GetResponseStream())
                {
                    using (StreamReader responseReader = new StreamReader(responseStream, System.Text.Encoding.UTF8))
                    {
                        T      result             = default(T);
                        string responseJsonString = responseReader.ReadToEnd();
                        if ((api >= Api.COUNTERSERVICE_GET && api <= Api.COUNTERSERVICE_COM_SET) || api == Api.CACHESERVICE_CONTAINS)
                        {
                            result = (T)Convert.ChangeType(responseJsonString, typeof(T));
                        }
                        else
                        {
                            if (string.IsNullOrEmpty(responseJsonString) == false)
                            {
                                result = JsonMapper.ToObject <T>(responseJsonString);
                            }
                        }
                        return(result);
                    }
                }
            }
            catch (WebException ex)
            {
                using (Stream responseStream = ex.Response.GetResponseStream())
                {
                    using (StreamReader responseReader = new StreamReader(responseStream, System.Text.Encoding.UTF8))
                    {
                        string           responseJsonString = responseReader.ReadToEnd();
                        BackendlessFault fault = null;

                        try
                        {
                            JsonData errorResponse = JsonMapper.ToObject(responseJsonString);
                            int      code          = (int)errorResponse["code"];
                            string   message       = (string)errorResponse["message"];

                            fault = new BackendlessFault(code.ToString(), message, null);
                        }
                        catch (System.Exception)
                        {
                            fault = new BackendlessFault(ex);
                        }

                        throw new BackendlessException(fault);
                    }
                }
            }
            catch (System.Exception ex)
            {
                BackendlessFault backendlessFault = new BackendlessFault(ex);
                throw new BackendlessException(backendlessFault);
            }
        }
예제 #22
0
 private void errorHandler(BackendlessFault fault)
 {
     System.Diagnostics.Debug.WriteLine("error sending token to backendless");
 }
예제 #23
0
 public virtual void CheckErrorCode(string expectedCode, BackendlessFault resultFault)
 {
     СheckStringExpectation(expectedCode, resultFault.FaultCode);
 }
예제 #24
0
 public virtual void CheckErrorCode(int expectedCode, BackendlessFault resultFault)
 {
     CheckCodeExpectation(expectedCode, resultFault.FaultCode, resultFault.Message);
 }
예제 #25
0
 private void HandleFault(BackendlessFault fault)
 {
     Dispatcher.BeginInvoke(() => MessageBox.Show(fault.Message));
 }
예제 #26
0
 public static void FailCountDownWith(BackendlessFault fault)
 {
     SetTestResult(fault.ToString());
     CountDownAll();
 }
예제 #27
0
        private static void GetResponseCallback <T>(IAsyncResult asynchronousResult)
        {
            RequestState <T> requestState = (RequestState <T>)asynchronousResult.AsyncState;
            T result = default(T);

            try
            {
                HttpWebRequest request = requestState.Request;

                HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
                using (Stream responseStream = response.GetResponseStream())
                {
                    using (StreamReader responseReader = new StreamReader(responseStream, System.Text.Encoding.UTF8))
                    {
                        string responseJsonString = responseReader.ReadToEnd();
                        if ((requestState.Api >= Api.COUNTERSERVICE_GET && requestState.Api <= Api.COUNTERSERVICE_COM_SET) || requestState.Api == Api.CACHESERVICE_CONTAINS)
                        {
                            result = (T)Convert.ChangeType(responseJsonString, typeof(T));
                        }
                        else
                        {
                            if (string.IsNullOrEmpty(responseJsonString) == false)
                            {
                                result = JsonMapper.ToObject <T>(responseJsonString);
                            }
                        }
                    }
                }

                response.Close();

                if (requestState.Callback != null)
                {
                    requestState.Callback.ResponseHandler.Invoke(result);
                }
            }
            catch (WebException ex)
            {
                using (Stream responseStream = ex.Response.GetResponseStream())
                {
                    using (StreamReader responseReader = new StreamReader(responseStream, System.Text.Encoding.UTF8))
                    {
                        string           responseJsonString = responseReader.ReadToEnd();
                        BackendlessFault fault = null;
                        try
                        {
                            JsonData errorResponse = JsonMapper.ToObject(responseJsonString);
                            int      code          = (int)errorResponse["code"];
                            string   message       = (string)errorResponse["message"];

                            fault = new BackendlessFault(code.ToString(), message, null);
                        }
                        catch (System.Exception)
                        {
                            fault = new BackendlessFault(ex);
                        }

                        if (requestState.Callback != null)
                        {
                            requestState.Callback.ErrorHandler.Invoke(fault);
                        }
                    }
                }
            }
            catch (System.Exception ex)
            {
                BackendlessFault backendlessFault = new BackendlessFault(ex);
                if (requestState.Callback != null)
                {
                    requestState.Callback.ErrorHandler.Invoke(backendlessFault);
                }
            }
        }