예제 #1
0
        private void ExecIsSubscribed(KiiSubscribable target, KiiHttpClientFactory factory, KiiCheckSubscriptionCallback callback)
        {
            if (callback == null)
            {
                throw new ArgumentNullException("KiiCheckSubscriptionCallback must not be null");
            }
            if (target == null)
            {
                callback(target, false, new ArgumentNullException("KiiSubscribable must not be null"));
                return;
            }
            Utils.CheckInitialize(true);
            KiiHttpClient client = factory.Create(ToUrl(target), Kii.AppId, Kii.AppKey, KiiHttpMethod.GET);

            KiiCloudEngine.SetAuthBearer(client);
            client.SendRequest((ApiResponse response, Exception e) => {
                if (e != null)
                {
                    if (e is NotFoundException)
                    {
                        callback(target, false, null);
                    }
                    else
                    {
                        callback(target, false, e);
                    }
                }
                else
                {
                    callback(target, response.IsSuccess(), e);
                }
            });
        }
예제 #2
0
        private void ExecDelete(KiiHttpClientFactory factory, KiiBucketCallback callback)
        {
            Utils.CheckInitialize(false);

            KiiHttpClient client = factory.Create(Url, Kii.AppId, Kii.AppKey, KiiHttpMethod.DELETE);

            KiiCloudEngine.SetAuthBearer(client);

            // send request
            client.SendRequest((ApiResponse response, Exception e) =>
            {
                if (e != null)
                {
                    if (callback != null)
                    {
                        callback(this, e);
                    }
                    return;
                }
                if (callback != null)
                {
                    callback(this, null);
                }
            });
        }
예제 #3
0
        private static void ExecUpload(KiiHttpClientFactory httpClientFactory, KiiEventCallback callback, KiiEvent[] eventList)
        {
            JsonArray array = new JsonArray();

            foreach (KiiEvent ev in eventList)
            {
                if (ev == null)
                {
                    throw new ArgumentException(ErrorInfo.KIIANALYTICS_EVENT_NULL);
                }
                if (ev.Sent)
                {
                    throw new ArgumentException(ErrorInfo.KIIANALYTICS_EVENT_ALREADY_SENT);
                }
                if (ev.GetType() == typeof(KiiEvent.NullKiiEvent))
                {
                    continue;
                }
                array.Put(ev.ConvertToJsonObject(INSTANCE.mDeviceID));
            }

            string url  = KiiAnalytics.BaseUrl + "/apps/" + KiiAnalytics.AppID + "/events";
            string body = array.ToString();

            KiiHttpClient client = httpClientFactory.Create(url, KiiAnalytics.AppID, KiiAnalytics.AppKey, KiiHttpMethod.POST);

            client.ContentType = "application/vnd.kii.EventRecordList+json";
            client.Body        = body;

            client.SendRequest((ApiResponse response, Exception e) => {
                if (e != null)
                {
                    if (!(e is CloudException))
                    {
                        InvokeUploadCallback(callback, e);
                    }
                    else
                    {
                        CloudException exp = (CloudException)e;
                        InvokeUploadCallback(callback, new EventUploadException(exp.Status, exp.Body, eventList));
                    }
                    return;
                }
                if (response.Status == 200)
                {
                    try {
                        List <KiiEvent> errorEventList = ParsePartialSuccessResponse(response.Body, eventList);
                        InvokeUploadCallback(callback, new EventUploadException(response.Status, response.Body, errorEventList));
                    } catch (Exception ex) {
                        InvokeUploadCallback(callback, ex);
                    }
                    return;
                }
                foreach (KiiEvent ev in eventList)
                {
                    ev.Sent = true;
                }
                InvokeUploadCallback(callback, null);
            });
        }
        private void ExecInstall(string deviceID, DeviceType deviceType, KiiHttpClientFactory factory, KiiPushInstallationCallback callback)
        {
            if (callback == null)
            {
                throw new ArgumentNullException("KiiPushInstallationCallback must not be null");
            }
            if (Utils.IsEmpty(deviceID))
            {
                callback(new ArgumentException(ErrorInfo.KIIPUSHINSTALLATION_DEVICE_ID_NULL));
                return;
            }
            Utils.CheckInitialize(true);
            string     url         = Utils.Path(Kii.BaseUrl, "apps", Kii.AppId, "installations");
            JsonObject requestBody = new JsonObject();

            requestBody.Put("installationRegistrationID", deviceID);
            requestBody.Put("deviceType", Enum.GetName(typeof(DeviceType), deviceType));
            if (this.development)
            {
                requestBody.Put("development", true);
            }

            KiiHttpClient client = factory.Create(url, Kii.AppId, Kii.AppKey, KiiHttpMethod.POST);

            KiiCloudEngine.SetAuthBearer(client);
            client.ContentType = "application/vnd.kii.InstallationCreationRequest+json";

            client.SendRequest(requestBody.ToString(), (ApiResponse response, Exception e) => {
                callback(e);
            });
        }
예제 #5
0
        private void ExecCount(KiiQuery query, KiiHttpClientFactory factory, CountCallback callback)
        {
            Utils.CheckInitialize(false);
            if (query == null)
            {
                query = new KiiQuery(null);
            }

            KiiHttpClient client = factory.Create(QueryUrl, Kii.AppId, Kii.AppKey, KiiHttpMethod.POST);

            KiiCloudEngine.SetAuthBearer(client);
            client.ContentType = "application/vnd.kii.QueryRequest+json";

            // send request
            string queryString = CountAggregationQuery(query);
            int    count       = 0;

            client.SendRequest(queryString, (ApiResponse response, Exception e) =>
            {
                if (e != null)
                {
                    callback(this, query, count, e);
                    return;
                }
                // parse response
                try {
                    JsonObject responseJson = new JsonObject(response.Body);
                    JsonObject aggregations = responseJson.GetJsonObject("aggregations");
                    count = aggregations.GetInt("count_field");
                    callback(this, query, count, null);
                } catch (JsonException jse) {
                    callback(this, query, count, new IllegalKiiBaseObjectFormatException(jse.Message));
                }
            });
        }
예제 #6
0
        private static void ExecGetResult(string ruleId, ResultCondition condition, KiiHttpClientFactory factory, KiiResultCallback callback)
        {
            string url = KiiAnalytics.BaseUrl + "/apps/" + KiiAnalytics.AppID + "/analytics/" + ruleId + "/data";

            if (condition != null)
            {
                url += "?" + condition.ToQueryString();
            }

            KiiHttpClient client = factory.Create(url, KiiAnalytics.AppID, KiiAnalytics.AppKey, KiiHttpMethod.GET);

            client.Accept = "application/vnd.kii.GroupedAnalyticResult+json";
            client.SendRequest((ApiResponse response, Exception e) => {
                if (e != null)
                {
                    invokeResultCallback(callback, ruleId, condition, null, e);
                    return;
                }
                try {
                    JsonObject obj       = new JsonObject(response.Body);
                    JsonArray snapshots  = obj.GetJsonArray("snapshots");
                    GroupedResult result = GroupedResult.Parse(snapshots);
                    invokeResultCallback(callback, ruleId, condition, result, null);
                } catch (JsonException) {
                    Exception ex = new IllegalKiiBaseObjectFormatException("Server response is broken.");
                    invokeResultCallback(callback, ruleId, condition, null, ex);
                }
            });
        }
예제 #7
0
        private void RemoveMembersFromCloud(IList <KiiUser> userList, int position, KiiHttpClientFactory factory, KiiGroupCallback callback)
        {
            if (position == userList.Count)
            {
                if (callback != null)
                {
                    callback(this, null);
                }
                return;
            }
            KiiUser user = userList[position];
            string  url  = Utils.Path(MembersUrl, user.ID);

            KiiHttpClient client = factory.Create(url, Kii.AppId, Kii.AppKey, KiiHttpMethod.DELETE);

            KiiCloudEngine.SetAuthBearer(client);

            // send request
            client.SendRequest((ApiResponse response, Exception e) =>
            {
                if (e != null)
                {
                    if (callback != null)
                    {
                        callback(this, new GroupOperationException(e.Message, e, new List <KiiUser>(addUsers), new List <KiiUser>(removeUsers)));
                    }
                    return;
                }
                removeUsers.Remove(user);
                RemoveMembersFromCloud(userList, position + 1, factory, callback);
            });
        }
예제 #8
0
        private void ExecSave(ACLOperation operation, KiiHttpClientFactory factory, KiiACLCallback <T, U> callback)
        {
            mParent.SaveParentIfNeeds();
            string requestUrl = Utils.Path(mParent.ParentUrl, "acl", mParent.ActionString, mSubject.Subject);

            KiiHttpClient client = GetHttpClient(factory, requestUrl, operation);

            if (client == null)
            {
                if (callback != null)
                {
                    callback(null, new InvalidOperationException("not grant/revoke request"));
                }
                return;
            }
            KiiCloudEngine.SetAuthBearer(client);

            // send request
            client.SendRequest((ApiResponse response, Exception e) =>
            {
                if (e != null)
                {
                    if (callback != null)
                    {
                        callback(null, e);
                    }
                    return;
                }
                if (callback != null)
                {
                    callback(this, null);
                }
            });
        }
예제 #9
0
        private void RemoveMembersFromCloud()
        {
            Utils.CheckInitialize(true);
            if (Utils.IsEmpty(ID))
            {
                throw new InvalidOperationException(ErrorInfo.KIIGROUP_NO_ID);
            }
            List <KiiUser> userList = new List <KiiUser>(removeUsers);

            foreach (KiiUser user in userList)
            {
                string url = Utils.Path(MembersUrl, user.ID);

                KiiHttpClient client = Kii.HttpClientFactory.Create(url, Kii.AppId, Kii.AppKey, KiiHttpMethod.DELETE);
                KiiCloudEngine.SetAuthBearer(client);

                try
                {
                    client.SendRequest();
                    removeUsers.Remove(user);
                }
                catch (CloudException e)
                {
                    throw new GroupOperationException(e.Message, e, new List <KiiUser>(addUsers), new List <KiiUser>(removeUsers));
                }
            }
        }
예제 #10
0
        /// <summary>
        /// Get the experiment having the specified id in background.
        /// </summary>
        /// <remarks>
        /// NOTE: This api access to server. Should not be executed in UI/Main thread.
        /// </remarks>
        /// <returns>Experiment which has the specified id.</returns>
        /// <param name="experimentID">Experiment id.</param>
        /// <param name="callback">Called on completion of get experiment.</param>
        public static void GetByID(String experimentID, KiiExperimentCallback callback)
        {
            if (!IsValidExperimentID(experimentID))
            {
                callback(null, new ArgumentException("Experiment id is invalid"));
                return;
            }
            Utils.CheckInitialize(false);
            string        getUrl = Utils.Path(Kii.BaseUrl, "apps", Kii.AppId, "buckets", "_experiments", "objects", experimentID);
            KiiHttpClient client = Kii.AsyncHttpClientFactory.Create(getUrl, Kii.AppId, Kii.AppKey, KiiHttpMethod.GET);

            KiiCloudEngine.SetAuthBearer(client);
            client.SendRequest((ApiResponse response, Exception e) =>
            {
                if (e != null)
                {
                    callback(null, e);
                    return;
                }
                else
                {
                    try
                    {
                        KiiExperiment kiiExperiment = CreateFromResponse(response);
                        callback(kiiExperiment, null);
                    }
                    catch (Exception ex)
                    {
                        callback(null, ex);
                    }
                }
            });
        }
예제 #11
0
        private void ExecExecute(KiiServerCodeEntryArgument argument, KiiHttpClientFactory factory, KiiServerCodeEntryCallback callback)
        {
            if (argument == null)
            {
                argument = KiiServerCodeEntryArgument.NewArgument(new JsonObject());
            }
            string url = Utils.Path(Kii.BaseUrl, "apps", Kii.AppId,
                                    "server-code", "versions", this.version, this.entryName);

            if (this.environmentVersion.HasValue)
            {
                url += "?environment-version=" + this.environmentVersion.Value.GetValue();
            }

            KiiHttpClient client = factory.Create(url, Kii.AppId, Kii.AppKey, KiiHttpMethod.POST);

            KiiCloudEngine.SetAuthBearer(client);
            client.ContentType = "application/json";

            client.SendRequest(argument.ToJson().ToString(), (ApiResponse response, Exception e) =>
            {
                if (callback == null)
                {
                    return;
                }
                if (e != null)
                {
                    callback(this, argument, null, e);
                    return;
                }
                // parse X-step-count
                int steps;
                try
                {
                    steps = int.Parse(response.GetHeader("X-Step-count"));
                }
                catch
                {
                    steps = 0;
                }
                // X-Environment-version
                KiiServerCodeEnvironmentVersion?environmentVersion = KiiServerCodeEnvironmentVersionExtensions.FromValue(response.GetHeader("X-Environment-version"));
                // parse body
                JsonObject resultBody;
                try
                {
                    resultBody = new JsonObject(response.Body);
                }
                catch (JsonException e2)
                {
                    callback(this, argument, null, new IllegalKiiBaseObjectFormatException(e2.Message));
                    return;
                }

                callback(this, argument, new KiiServerCodeExecResult(resultBody, steps, environmentVersion), null);
            });
        }
예제 #12
0
        private void ExecQuery(KiiQuery query, KiiHttpClientFactory factory, KiiQueryCallback <KiiObject> callback)
        {
            Utils.CheckInitialize(false);

            KiiHttpClient client = factory.Create(QueryUrl, Kii.AppId, Kii.AppKey, KiiHttpMethod.POST);

            KiiCloudEngine.SetAuthBearer(client);
            client.ContentType = "application/vnd.kii.QueryRequest+json";

            if (query == null)
            {
                query = new KiiQuery(null);
            }

            // send request
            client.SendRequest(query.ToString(), (ApiResponse response, Exception e) =>
            {
                if (e != null)
                {
                    if (callback != null)
                    {
                        callback(null, e);
                    }
                    return;
                }
                // parse response
                KiiQueryResult <KiiObject> queryResult = null;
                try
                {
                    JsonObject obj           = new JsonObject(response.Body);
                    JsonArray array          = obj.GetJsonArray("results");
                    String nextPaginationKey = obj.OptString("nextPaginationKey");
                    queryResult = new KiiQueryResult <KiiObject>(query, nextPaginationKey, this, false);

                    for (int i = 0; i < array.Length(); i++)
                    {
                        JsonObject entry    = array.GetJsonObject(i);
                        KiiObject kiiObject = new KiiObject(mParent, mBucketName, entry);
                        queryResult.Add(kiiObject);
                    }
                }
                catch (JsonException e2)
                {
                    if (callback != null)
                    {
                        callback(null, new IllegalKiiBaseObjectFormatException(e2.Message));
                    }
                    return;
                }
                if (callback != null)
                {
                    callback(queryResult, null);
                }
            });
        }
예제 #13
0
        private void ExecListAclEntries(KiiHttpClientFactory factory, KiiACLListCallback <T, U> callback)
        {
            if (callback == null)
            {
                throw new ArgumentNullException("KiiACLListCallback must not be null");
            }
            try
            {
                Utils.CheckInitialize(true);
            }
            catch (Exception e)
            {
                callback(null, e);
                return;
            }
            string id = ParentID;

            if (Utils.IsEmpty(id))
            {
                callback(null, new InvalidOperationException("Topic does not exist in the cloud."));
                return;
            }
            // Fetch ACL
            string aclUrl = Utils.Path(ParentUrl, "acl");

            KiiHttpClient client = factory.Create(aclUrl, Kii.AppId, Kii.AppKey, KiiHttpMethod.GET);

            KiiCloudEngine.SetAuthBearer(client);

            // send request
            client.SendRequest((ApiResponse response, Exception e) =>
            {
                if (e != null)
                {
                    callback(null, e);
                    return;
                }
                // parse response
                IList <KiiACLEntry <T, U> > list = null;
                try
                {
                    JsonObject respObj = new JsonObject(response.Body);
                    list = ParseListResponse(respObj);
                }
                catch (JsonException)
                {
                    callback(null, new IllegalKiiBaseObjectFormatException(response.Body));
                    return;
                }
                callback(list, null);
            });
        }
예제 #14
0
        private void ExecRefresh(KiiHttpClientFactory factory, KiiGroupCallback callback)
        {
            Utils.CheckInitialize(true);
            if (Utils.IsEmpty(ID))
            {
                if (callback != null)
                {
                    callback(this, new InvalidOperationException(ErrorInfo.KIIGROUP_NO_ID));
                }
                return;
            }

            KiiHttpClient client = factory.Create(Url, Kii.AppId, Kii.AppKey, KiiHttpMethod.GET);

            KiiCloudEngine.SetAuthBearer(client);
            client.Accept = "application/vnd.kii.GroupRetrievalResponse+json";

            // send request
            client.SendRequest((ApiResponse response, Exception e) =>
            {
                if (e != null)
                {
                    if (callback != null)
                    {
                        callback(this, e);
                    }
                    return;
                }
                // parse response
                try
                {
                    JsonObject respObj = new JsonObject(response.Body);

                    mId       = respObj.GetString("groupID");
                    mOwnerId  = respObj.OptString("owner", null);
                    groupName = respObj.GetString("name");
                }
                catch (JsonException)
                {
                    if (callback != null)
                    {
                        callback(this, new IllegalKiiBaseObjectFormatException(response.Body));
                    }
                    return;
                }
                if (callback != null)
                {
                    callback(this, null);
                }
            });
        }
예제 #15
0
        private void ExecSave(KiiHttpClientFactory factory, KiiTopicCallback callback)
        {
            if (callback == null)
            {
                throw new ArgumentNullException("KiiTopicCallback must not be null");
            }
            Utils.CheckInitialize(false);
            KiiHttpClient client = factory.Create(Url, Kii.AppId, Kii.AppKey, KiiHttpMethod.PUT);

            KiiCloudEngine.SetAuthBearer(client);
            client.SendRequest((ApiResponse response, Exception e) => {
                callback(this, e);
            });
        }
예제 #16
0
        private void SaveToCloud()
        {
            Utils.CheckInitialize(true);
            mOwnerId = Kii.CurrentUser.ID;
            string url = Utils.Path(Kii.BaseUrl, "apps", Kii.AppId,
                                    "groups");

            KiiHttpClient client = Kii.HttpClientFactory.Create(url, Kii.AppId, Kii.AppKey, KiiHttpMethod.POST);

            KiiCloudEngine.SetAuthBearer(client);
            client.Accept = "application/vnd.kii.GroupCreationResponse+json";

            JsonObject obj = new JsonObject();

            try
            {
                obj.Put("name", groupName);
                obj.Put("owner", mOwnerId);
                obj.Put("members", UserIds());
            }
            catch (JsonException e1)
            {
                throw new SystemException("unexpected error!", e1);
            }

            client.ContentType = "application/vnd.kii.GroupCreationRequest+json";
            client.Body        = obj.ToString();

            // send Request
            ApiResponse res = null;

            try
            {
                res = client.SendRequest();
            }
            catch (CloudException e)
            {
                throw new GroupOperationException(e.Message, e, new List <KiiUser>(addUsers), null);
            }

            try
            {
                JsonObject respObj = new JsonObject(res.Body);
                mId = respObj.GetString("groupID");
                // TODO: parse response and get list of failed user (CMO-557)
            } catch (JsonException) {
                throw new IllegalKiiBaseObjectFormatException(res.Body);
            }
            addUsers.Clear();
        }
예제 #17
0
        /// <summary>
        /// Get the experiment which has the specified id.
        /// </summary>
        /// <remarks>
        /// NOTE: This api access to server. Should not be executed in UI/Main thread.
        /// </remarks>
        /// <returns>Experiment which has the specified id.</returns>
        /// <param name="experimentID">Experiment id.</param>
        public static KiiExperiment GetByID(String experimentID)
        {
            if (!IsValidExperimentID(experimentID))
            {
                throw new ArgumentException("Experiment id is invalid");
            }
            Utils.CheckInitialize(false);
            string        getUrl = Utils.Path(Kii.BaseUrl, "apps", Kii.AppId, "buckets", "_experiments", "objects", experimentID);
            KiiHttpClient client = Kii.HttpClientFactory.Create(getUrl, Kii.AppId, Kii.AppKey, KiiHttpMethod.GET);

            KiiCloudEngine.SetAuthBearer(client);
            ApiResponse response = client.SendRequest();

            return(CreateFromResponse(response));
        }
예제 #18
0
        private void ExecChangeName(string name, KiiHttpClientFactory factory, KiiGroupCallback callback)
        {
            Utils.CheckInitialize(true);
            if (Utils.IsEmpty(name))
            {
                if (callback != null)
                {
                    callback(this, new ArgumentException("provided name is null"));
                }
                return;
            }
            string id = ID;

            if (Utils.IsEmpty(id))
            {
                if (callback != null)
                {
                    callback(this, new InvalidOperationException(ErrorInfo.KIIGROUP_NO_ID));
                }
                return;
            }

            string url = Utils.Path(Url, "name");

            KiiHttpClient client = factory.Create(url, Kii.AppId, Kii.AppKey, KiiHttpMethod.PUT);

            KiiCloudEngine.SetAuthBearer(client);
            client.ContentType = "text/plain";

            // send request
            client.SendRequest(name, (ApiResponse response, Exception e) =>
            {
                if (e != null)
                {
                    if (callback != null)
                    {
                        callback(this, e);
                    }
                    return;
                }
                this.groupName = name;
                if (callback != null)
                {
                    callback(this, null);
                }
            });
        }
예제 #19
0
        private void ExecListTopics(KiiHttpClientFactory factory, string paginationKey, KiiGenericsCallback <KiiListResult <KiiTopic> > callback)
        {
            if (callback == null)
            {
                throw new ArgumentNullException("KiiGenericsCallback must not be null");
            }
            try
            {
                Utils.CheckInitialize(true);
            }
            catch (Exception e)
            {
                callback(null, e);
                return;
            }
            if (Utils.IsEmpty(ID))
            {
                callback(null, new InvalidOperationException(ErrorInfo.KIIGROUP_NO_ID));
                return;
            }
            String url = Utils.Path(Url, "topics");

            if (!String.IsNullOrEmpty(paginationKey))
            {
                url = url + "?paginationKey=" + Uri.EscapeUriString(paginationKey);
            }
            KiiHttpClient client = factory.Create(url, Kii.AppId, Kii.AppKey, KiiHttpMethod.GET);

            KiiCloudEngine.SetAuthBearer(client);
            client.SendRequest((ApiResponse response, Exception e) => {
                if (e != null)
                {
                    callback(null, e);
                    return;
                }
                JsonObject json         = new JsonObject(response.Body);
                String newPaginationKey = json.OptString("paginationKey", null);
                JsonArray array         = json.GetJsonArray("topics");
                List <KiiTopic> topics  = new List <KiiTopic>();
                for (int i = 0; i < array.Length(); i++)
                {
                    topics.Add(this.Topic(array.GetJsonObject(i).GetString("topicID")));
                }
                callback(new KiiListResult <KiiTopic>(topics, newPaginationKey), null);
            });
        }
예제 #20
0
        private void ExecUnsubscribe(KiiSubscribable target, KiiHttpClientFactory factory, KiiSubscriptionCallback callback)
        {
            if (callback == null)
            {
                throw new ArgumentNullException("KiiSubscriptionCallback must not be null");
            }
            if (target == null)
            {
                callback(target, new ArgumentNullException("KiiSubscribable must not be null"));
                return;
            }
            Utils.CheckInitialize(true);
            KiiHttpClient client = factory.Create(ToUrl(target), Kii.AppId, Kii.AppKey, KiiHttpMethod.DELETE);

            KiiCloudEngine.SetAuthBearer(client);
            client.SendRequest((ApiResponse response, Exception e) => {
                callback(target, e);
            });
        }
예제 #21
0
        private void ExecSendMessage(KiiPushMessage message, KiiHttpClientFactory factory, KiiPushMessageCallback callback)
        {
            if (callback == null)
            {
                throw new ArgumentNullException("KiiPushMessageCallback must not be null");
            }
            if (message == null)
            {
                callback(message, new ArgumentNullException("KiiPushMessage must not be null"));
                return;
            }
            Utils.CheckInitialize(false);
            KiiHttpClient client = factory.Create(MessageUrl, Kii.AppId, Kii.AppKey, KiiHttpMethod.POST);

            KiiCloudEngine.SetAuthBearer(client);
            client.ContentType = "application/vnd.kii.SendPushMessageRequest+json";
            client.SendRequest(message.ToJson().ToString(), (ApiResponse response, Exception e) => {
                callback(message, e);
            });
        }
예제 #22
0
        private void ExecDelete(KiiHttpClientFactory factory, KiiGroupCallback callback)
        {
            Utils.CheckInitialize(true);
            if (Utils.IsEmpty(ID))
            {
                if (callback != null)
                {
                    callback(this, new InvalidOperationException(ErrorInfo.KIIGROUP_NO_ID));
                }
                return;
            }

            KiiHttpClient client = factory.Create(Url, Kii.AppId, Kii.AppKey, KiiHttpMethod.DELETE);

            KiiCloudEngine.SetAuthBearer(client);
            client.Accept = "application/vnd.kii.GroupRetrievalResponse+json";

            // send request
            client.SendRequest((ApiResponse response, Exception e) =>
            {
                if (e != null)
                {
                    if (callback != null)
                    {
                        callback(this, e);
                    }
                    return;
                }
                // clear id and members
                mId      = null;
                mOwnerId = null;
                addUsers.Clear();
                removeUsers.Clear();

                if (callback != null)
                {
                    callback(this, null);
                }
            });
        }
        private void ExecUninstall(string deviceID, DeviceType deviceType, KiiHttpClientFactory factory, KiiPushInstallationCallback callback)
        {
            if (callback == null)
            {
                throw new ArgumentNullException("KiiPushInstallationCallback must not be null");
            }
            if (Utils.IsEmpty(deviceID))
            {
                callback(new ArgumentException(ErrorInfo.KIIPUSHINSTALLATION_DEVICE_ID_NULL));
                return;
            }
            Utils.CheckInitialize(true);
            string url = Utils.Path(Kii.BaseUrl, "apps", Kii.AppId, "installations", Enum.GetName(typeof(DeviceType), deviceType) + ":" + deviceID);

            KiiHttpClient client = factory.Create(url, Kii.AppId, Kii.AppKey, KiiHttpMethod.DELETE);

            KiiCloudEngine.SetAuthBearer(client);

            client.SendRequest((ApiResponse response, Exception e) => {
                callback(e);
            });
        }
예제 #24
0
        private void ExecExists(KiiHttpClientFactory factory, KiiGenericsCallback <Boolean?> callback)
        {
            if (callback == null)
            {
                throw new ArgumentNullException("KiiGenericsCallback must not be null");
            }
            try
            {
                Utils.CheckInitialize(true);
            }
            catch (Exception e)
            {
                callback(null, e);
                return;
            }
            KiiHttpClient client = factory.Create(Url, Kii.AppId, Kii.AppKey, KiiHttpMethod.HEAD);

            KiiCloudEngine.SetAuthBearer(client);
            client.SendRequest((ApiResponse response, Exception e) => {
                if (e == null)
                {
                    callback(true, null);
                }
                else
                {
                    if (e is NotFoundException)
                    {
                        callback(false, null);
                    }
                    else
                    {
                        callback(null, e);
                    }
                }
            });
        }
예제 #25
0
        private static void ExecRegisterWithID(string id, string name, IList <KiiUser> members, KiiHttpClientFactory factory, KiiGenericsCallback <KiiGroup> callback)
        {
            try
            {
                Utils.CheckInitialize(true);
            }
            catch (Exception e)
            {
                callback(null, e);
                return;
            }
            if (String.IsNullOrEmpty(id))
            {
                callback(null, new ArgumentException("id is null or empty."));
                return;
            }
            if (!Utils.ValidateGroupID(id))
            {
                callback(null, new ArgumentException("Invalid groupID format. " + id));
                return;
            }
            if (String.IsNullOrEmpty(name))
            {
                callback(null, new ArgumentException("name is null or empty."));
                return;
            }

            String        ownerId = Kii.CurrentUser.ID;
            string        url     = Utils.Path(Kii.BaseUrl, "apps", Kii.AppId, "groups", id);
            KiiHttpClient client  = factory.Create(url, Kii.AppId, Kii.AppKey, KiiHttpMethod.PUT);

            KiiCloudEngine.SetAuthBearer(client);
            client.Accept = "application/vnd.kii.GroupCreationResponse+json";

            JsonObject request = new JsonObject();

            try
            {
                request.Put("name", name);
                request.Put("owner", ownerId);
                if (members != null && members.Count > 0)
                {
                    JsonArray memberIDs = new JsonArray();
                    foreach (KiiUser member in members)
                    {
                        if (!Utils.IsEmpty(member.ID))
                        {
                            memberIDs.Put(member.ID);
                        }
                    }
                    request.Put("members", memberIDs);
                }
            }
            catch (JsonException e)
            {
                if (callback != null)
                {
                    callback(null, new SystemException("unexpected error!", e));
                }
                return;
            }

            client.ContentType = "application/vnd.kii.GroupCreationRequest+json";

            // send Request
            client.SendRequest(request.ToString(), (ApiResponse response, Exception e) =>
            {
                if (e != null)
                {
                    if (callback != null)
                    {
                        callback(null, new GroupOperationException(e.Message, e, members, null));
                    }
                    return;
                }
                // parse response
                try
                {
                    JsonObject respObj = new JsonObject(response.Body);
                    KiiGroup group     = new KiiGroup(name, members);
                    group.mId          = respObj.GetString("groupID");
                    group.mOwnerId     = ownerId;
                    if (callback != null)
                    {
                        callback(group, null);
                    }
                }
                catch (JsonException)
                {
                    if (callback != null)
                    {
                        callback(null, new IllegalKiiBaseObjectFormatException(response.Body));
                    }
                    return;
                }
            });
        }
예제 #26
0
        private void ExecListMembers(KiiHttpClientFactory factory, KiiUserListCallback callback)
        {
            Utils.CheckInitialize(true);
            string groupId = ID;

            if (Utils.IsEmpty(groupId))
            {
                if (callback != null)
                {
                    callback(null, new InvalidOperationException(ErrorInfo.KIIGROUP_NO_ID));
                }
                return;
            }

            string getUrl = Utils.Path(MembersUrl);

            KiiHttpClient client = factory.Create(getUrl, Kii.AppId, Kii.AppKey, KiiHttpMethod.GET);

            KiiCloudEngine.SetAuthBearer(client);
            client.Accept = "application/vnd.kii.MembersRetrievalResponse+json";

            // send request
            client.SendRequest((ApiResponse response, Exception e) =>
            {
                if (e != null)
                {
                    if (callback != null)
                    {
                        callback(null, e);
                    }
                    return;
                }
                // parse response
                List <KiiUser> members = new List <KiiUser>();
                try
                {
                    JsonObject respObj = new JsonObject(response.Body);
                    JsonArray array    = respObj.GetJsonArray("members");
                    if (array == null || array.Length() == 0)
                    {
                        if (callback != null)
                        {
                            callback(members, null);
                        }
                        return;
                    }
                    for (int i = 0; i < array.Length(); i++)
                    {
                        JsonObject obj = array.GetJsonObject(i);
                        string id      = obj.GetString("userID");
                        if (Utils.IsEmpty(id))
                        {
                            callback(null, new IllegalKiiBaseObjectFormatException(response.Body));
                            return;
                        }
                        KiiUser user = KiiUser.UserWithID(id);
                        members.Add(user);
                    }
                }
                catch (JsonException)
                {
                    if (callback != null)
                    {
                        callback(null, new IllegalKiiBaseObjectFormatException(response.Body));
                    }
                    return;
                }
                if (callback != null)
                {
                    callback(members, null);
                }
            });
        }