internal void WhereNow(string uuid, Dictionary <string, object> externalQueryParam, PNCallback <PNWhereNowResult> callback) { if (jsonLibrary == null) { throw new MissingMemberException("Missing Json Pluggable Library for Pubnub Instance"); } string currentUuid = ""; if (string.IsNullOrEmpty(uuid)) { currentUuid = config.Uuid; } else { currentUuid = uuid; } IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr); urlBuilder.PubnubInstanceId = (PubnubInstance != null) ? PubnubInstance.InstanceId : ""; Uri request = urlBuilder.BuildWhereNowRequest(currentUuid, externalQueryParam); RequestState <PNWhereNowResult> requestState = new RequestState <PNWhereNowResult>(); requestState.Channels = new [] { currentUuid }; requestState.ResponseType = PNOperationType.PNWhereNowOperation; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; string json = UrlProcessRequest <PNWhereNowResult>(request, requestState, false); if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse <PNWhereNowResult>(requestState, json); ProcessResponseCallbacks(result, requestState); } }
private void GenerateFileUploadUrl(Dictionary <string, object> externalQueryParam, PNCallback <PNGenerateFileUploadUrlResult> callback) { RequestState <PNGenerateFileUploadUrlResult> requestState = new RequestState <PNGenerateFileUploadUrlResult>(); requestState.ResponseType = PNOperationType.PNGenerateFileUploadUrlOperation; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; requestState.UsePostMethod = true; Dictionary <string, object> messageEnvelope = new Dictionary <string, object>(); if (!string.IsNullOrEmpty(sendFileName)) { messageEnvelope.Add("name", sendFileName); } string postMessage = jsonLibrary.SerializeToJsonString(messageEnvelope); byte[] postData = Encoding.UTF8.GetBytes(postMessage); IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr, (PubnubInstance != null) ? PubnubInstance.InstanceId : ""); Uri request = urlBuilder.BuildGenerateFileUploadUrlRequest("POST", postMessage, this.channelName, externalQueryParam); UrlProcessRequest(request, requestState, false, postData).ContinueWith(r => { string json = r.Result.Item1; if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse(requestState, json); ProcessResponseCallbacks(result, requestState); } }, TaskContinuationOptions.ExecuteSynchronously).Wait(); }
internal void RemoveChannelForDevice(string[] channels, PNPushType pushType, string pushToken, PNCallback <PNPushRemoveChannelResult> callback) { if (channels == null || channels.Length == 0 || channels[0] == null || channels[0].Trim().Length == 0) { throw new ArgumentException("Missing Channel"); } if (pushToken == null) { throw new ArgumentException("Missing deviceId"); } string channel = string.Join(",", channels.OrderBy(x => x).ToArray()); IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr); urlBuilder.PubnubInstanceId = (PubnubInstance != null) ? PubnubInstance.InstanceId : ""; Uri request = urlBuilder.BuildRemoveChannelPushRequest(channel, pushType, pushToken); RequestState <PNPushRemoveChannelResult> requestState = new RequestState <PNPushRemoveChannelResult>(); requestState.Channels = new [] { channel }; requestState.ResponseType = PNOperationType.PushRemove; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; string json = UrlProcessRequest <PNPushRemoveChannelResult>(request, requestState, false); if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse <PNPushRemoveChannelResult>(requestState, json); ProcessResponseCallbacks(result, requestState); } }
internal void RemoveChannelsFromChannelGroup(string[] channels, string nameSpace, string groupName, Dictionary <string, object> externalQueryParam, PNCallback <PNChannelGroupsRemoveChannelResult> callback) { if (channels == null || channels.Length == 0) { throw new ArgumentException("Missing channel(s)"); } if (nameSpace == null) { throw new ArgumentException("Missing nameSpace"); } if (string.IsNullOrEmpty(groupName) || groupName.Trim().Length == 0) { throw new ArgumentException("Missing groupName"); } IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr); urlBuilder.PubnubInstanceId = (PubnubInstance != null) ? PubnubInstance.InstanceId : ""; string channelsCommaDelimited = channels != null && channels.Length > 0 ? string.Join(",", channels.OrderBy(x => x).ToArray()) : ""; Uri request = urlBuilder.BuildRemoveChannelsFromChannelGroupRequest(channelsCommaDelimited, nameSpace, groupName, externalQueryParam); RequestState <PNChannelGroupsRemoveChannelResult> requestState = new RequestState <PNChannelGroupsRemoveChannelResult>(); requestState.ResponseType = PNOperationType.PNRemoveChannelsFromGroupOperation; requestState.Channels = new string[] { }; requestState.ChannelGroups = new string[] { groupName }; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; string json = UrlProcessRequest <PNChannelGroupsRemoveChannelResult>(request, requestState, false); if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse <PNChannelGroupsRemoveChannelResult>(requestState, json); ProcessResponseCallbacks(result, requestState); } }
public void Async(PNCallback <PNPushListProvisionsResult> callback) { Execute(callback); }
internal void SetUserState(string[] channels, string[] channelGroups, string uuid, string jsonUserState, PNCallback <PNSetStateResult> callback) { if ((channels == null && channelGroups == null) || (channels != null && channelGroups != null && channels.Length == 0 && channelGroups.Length == 0)) { throw new ArgumentException("Either Channel Or Channel Group or Both should be provided"); } if (string.IsNullOrEmpty(jsonUserState) || string.IsNullOrEmpty(jsonUserState.Trim())) { throw new ArgumentException("Missing User State"); } List <string> channelList = new List <string>(); List <string> channelGroupList = new List <string>(); if (channels != null && channels.Length > 0) { channelList = new List <string>(channels); channelList = channelList.Where(ch => !string.IsNullOrEmpty(ch) && ch.Trim().Length > 0).Distinct <string>().ToList(); channels = channelList.ToArray(); } if (channelGroups != null && channelGroups.Length > 0) { channelGroupList = new List <string>(channelGroups); channelGroupList = channelGroupList.Where(cg => !string.IsNullOrEmpty(cg) && cg.Trim().Length > 0).Distinct <string>().ToList(); channelGroups = channelGroupList.ToArray(); } string commaDelimitedChannel = (channels != null && channels.Length > 0) ? string.Join(",", channels.OrderBy(x => x).ToArray()) : ""; string commaDelimitedChannelGroup = (channelGroups != null && channelGroups.Length > 0) ? string.Join(",", channelGroups.OrderBy(x => x).ToArray()) : ""; if (!jsonLibrary.IsDictionaryCompatible(jsonUserState)) { throw new MissingMemberException("Missing json format for user state"); } else { Dictionary <string, object> deserializeUserState = jsonLibrary.DeserializeToDictionaryOfObject(jsonUserState); if (deserializeUserState == null) { throw new MissingMemberException("Missing json format user state"); } else { bool stateChanged = false; for (int channelIndex = 0; channelIndex < channelList.Count; channelIndex++) { string currentChannel = channelList[channelIndex]; string oldJsonChannelState = GetLocalUserState(currentChannel, ""); if (oldJsonChannelState != jsonUserState) { stateChanged = true; break; } } if (!stateChanged) { for (int channelGroupIndex = 0; channelGroupIndex < channelGroupList.Count; channelGroupIndex++) { string currentChannelGroup = channelGroupList[channelGroupIndex]; string oldJsonChannelGroupState = GetLocalUserState("", currentChannelGroup); if (oldJsonChannelGroupState != jsonUserState) { stateChanged = true; break; } } } if (!stateChanged) { StatusBuilder statusBuilder = new StatusBuilder(config, jsonLibrary); PNStatus status = statusBuilder.CreateStatusResponse <PNSetStateResult>(PNOperationType.PNSetStateOperation, PNStatusCategory.PNUnknownCategory, null, (int)System.Net.HttpStatusCode.NotModified, null); Announce(status); return; } } } SharedSetUserState(channels, channelGroups, uuid, jsonUserState, jsonUserState, callback); }
private void CleanUp() { this.savedCallback = null; }
internal void DeleteMessage(string channel, long start, long end, Dictionary <string, object> externalQueryParam, PNCallback <PNDeleteMessageResult> callback) { if (string.IsNullOrEmpty(channel) || string.IsNullOrEmpty(channel.Trim())) { throw new ArgumentException("Missing Channel"); } IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr); urlBuilder.PubnubInstanceId = (PubnubInstance != null) ? PubnubInstance.InstanceId : ""; Uri request = urlBuilder.BuildDeleteMessageRequest(channel, start, end, externalQueryParam); RequestState <PNDeleteMessageResult> requestState = new RequestState <PNDeleteMessageResult>(); requestState.Channels = new [] { channel }; requestState.ResponseType = PNOperationType.PNDeleteMessageOperation; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; string json = UrlProcessRequest <PNDeleteMessageResult>(request, requestState, false); if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse <PNDeleteMessageResult>(requestState, json); ProcessResponseCallbacks(result, requestState); } }
public void Async(PNCallback <PNDeleteMessageResult> callback) { Execute(callback); }
internal void AuditAccess(string channel, string channelGroup, string[] authKeys, Dictionary <string, object> externalQueryParam, PNCallback <PNAccessManagerAuditResult> callback) { if (string.IsNullOrEmpty(config.SecretKey) || string.IsNullOrEmpty(config.SecretKey.Trim()) || config.SecretKey.Length <= 0) { throw new MissingMemberException("Invalid secret key"); } string authKeysCommaDelimited = (authKeys != null && authKeys.Length > 0) ? string.Join(",", authKeys.OrderBy(x => x).ToArray()) : ""; IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr); urlBuilder.PubnubInstanceId = (PubnubInstance != null) ? PubnubInstance.InstanceId : ""; Uri request = urlBuilder.BuildAuditAccessRequest(channel, channelGroup, authKeysCommaDelimited, externalQueryParam); RequestState <PNAccessManagerAuditResult> requestState = new RequestState <PNAccessManagerAuditResult>(); if (!string.IsNullOrEmpty(channel)) { requestState.Channels = new [] { channel }; } if (!string.IsNullOrEmpty(channelGroup)) { requestState.ChannelGroups = new [] { channelGroup }; } requestState.ResponseType = PNOperationType.PNAccessManagerAudit; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; string json = UrlProcessRequest <PNAccessManagerAuditResult>(request, requestState, false); if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse <PNAccessManagerAuditResult>(requestState, json); ProcessResponseCallbacks(result, requestState); } }
public void Async(PNCallback <PNAccessManagerAuditResult> callback) { Execute(callback); }
private void Publish(string channel, long messageTimetoken, PNMessageAction messageAction, Dictionary <string, object> externalQueryParam, PNCallback <PNAddMessageActionResult> callback) { if (string.IsNullOrEmpty(channel) || string.IsNullOrEmpty(channel.Trim()) || messageAction == null) { PNStatus status = new PNStatus(); status.Error = true; status.ErrorData = new PNErrorData("Missing Channel or MessageAction", new ArgumentException("Missing Channel or MessageAction")); callback.OnResponse(null, status); return; } if (string.IsNullOrEmpty(config.SubscribeKey) || string.IsNullOrEmpty(config.SubscribeKey.Trim()) || config.SubscribeKey.Length <= 0) { PNStatus status = new PNStatus(); status.Error = true; status.ErrorData = new PNErrorData("Invalid subscribe key", new MissingMemberException("Invalid subscribe key")); callback.OnResponse(null, status); return; } if (callback == null) { return; } string requestMethodName = "POST"; string postMessage = jsonLibrary.SerializeToJsonString(messageAction); byte[] postData = Encoding.UTF8.GetBytes(postMessage); IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr, (PubnubInstance != null) ? PubnubInstance.InstanceId : ""); Uri request = urlBuilder.BuildAddMessageActionRequest(requestMethodName, postMessage, channel, messageTimetoken, externalQueryParam); RequestState <PNAddMessageActionResult> requestState = new RequestState <PNAddMessageActionResult>(); requestState.Channels = new[] { channel }; requestState.ResponseType = PNOperationType.PNAddMessageActionOperation; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; requestState.UsePostMethod = true; UrlProcessRequest(request, requestState, false, postData).ContinueWith(r => { string json = r.Result.Item1; if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse(requestState, json); ProcessResponseCallbacks(result, requestState); } CleanUp(); }, TaskContinuationOptions.ExecuteSynchronously).Wait(); }
internal void GetChannelsForChannelGroup(string groupName, Dictionary <string, object> externalQueryParam, PNCallback <PNChannelGroupsAllChannelsResult> callback) { if (string.IsNullOrEmpty(groupName) || groupName.Trim().Length == 0) { throw new ArgumentException("Missing groupName"); } IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr, (PubnubInstance != null) ? PubnubInstance.InstanceId : ""); Uri request = urlBuilder.BuildGetChannelsForChannelGroupRequest("GET", "", null, groupName, false, externalQueryParam); RequestState <PNChannelGroupsAllChannelsResult> requestState = new RequestState <PNChannelGroupsAllChannelsResult>(); requestState.ResponseType = PNOperationType.ChannelGroupGet; requestState.ChannelGroups = new [] { groupName }; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; UrlProcessRequest(request, requestState, false).ContinueWith(r => { string json = r.Result.Item1; if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse(requestState, json); ProcessResponseCallbacks(result, requestState); } }, TaskContinuationOptions.ExecuteSynchronously).Wait(); }
public void Async(PNCallback <PNChannelGroupsAllChannelsResult> callback) { Execute(callback); }
internal void SetUserState(string[] channels, string[] channelGroups, string uuid, KeyValuePair <string, object> keyValuePair, PNCallback <PNSetStateResult> callback) { if ((channels == null && channelGroups != null) || (channels.Length == 0 && channelGroups.Length == 0)) { throw new ArgumentException("Either Channel Or Channel Group or Both should be provided."); } List <string> channelList = new List <string>(); List <string> channelGroupList = new List <string>(); if (channels != null && channels.Length > 0) { channelList = new List <string>(channels); channelList = channelList.Where(ch => !string.IsNullOrEmpty(ch) && ch.Trim().Length > 0).Distinct <string>().ToList(); channels = channelList.ToArray(); } if (channelGroups != null && channelGroups.Length > 0) { channelGroupList = new List <string>(channelGroups); channelGroupList = channelGroupList.Where(cg => !string.IsNullOrEmpty(cg) && cg.Trim().Length > 0).Distinct <string>().ToList(); channelGroups = channelGroupList.ToArray(); } string commaDelimitedChannel = (channels != null && channels.Length > 0) ? string.Join(",", channels.OrderBy(x => x).ToArray()) : ""; string commaDelimitedChannelGroup = (channelGroups != null && channelGroups.Length > 0) ? string.Join(",", channelGroups.OrderBy(x => x).ToArray()) : ""; string key = keyValuePair.Key; int valueInt; double valueDouble; bool stateChanged = false; string currentChannelUserState = ""; string currentChannelGroupUserState = ""; for (int channelIndex = 0; channelIndex < channelList.Count; channelIndex++) { string currentChannel = channelList[channelIndex]; string oldJsonChannelState = GetLocalUserState(currentChannel, ""); currentChannelUserState = ""; if (keyValuePair.Value == null) { currentChannelUserState = SetLocalUserState(currentChannel, "", key, null); } else if (Int32.TryParse(keyValuePair.Value.ToString(), out valueInt)) { currentChannelUserState = SetLocalUserState(currentChannel, "", key, valueInt); } else if (Double.TryParse(keyValuePair.Value.ToString(), out valueDouble)) { currentChannelUserState = SetLocalUserState(currentChannel, "", key, valueDouble); } else { currentChannelUserState = SetLocalUserState(currentChannel, "", key, keyValuePair.Value.ToString()); } if (oldJsonChannelState != currentChannelUserState) { stateChanged = true; break; } } if (!stateChanged) { for (int channelGroupIndex = 0; channelGroupIndex < channelGroupList.Count; channelGroupIndex++) { string currentChannelGroup = channelGroupList[channelGroupIndex]; string oldJsonChannelGroupState = GetLocalUserState("", currentChannelGroup); currentChannelGroupUserState = ""; if (keyValuePair.Value == null) { currentChannelGroupUserState = SetLocalUserState("", currentChannelGroup, key, null); } else if (Int32.TryParse(keyValuePair.Value.ToString(), out valueInt)) { currentChannelGroupUserState = SetLocalUserState("", currentChannelGroup, key, valueInt); } else if (Double.TryParse(keyValuePair.Value.ToString(), out valueDouble)) { currentChannelGroupUserState = SetLocalUserState("", currentChannelGroup, key, valueDouble); } else { currentChannelGroupUserState = SetLocalUserState("", currentChannelGroup, key, keyValuePair.Value.ToString()); } if (oldJsonChannelGroupState != currentChannelGroupUserState) { stateChanged = true; break; } } } if (!stateChanged) { StatusBuilder statusBuilder = new StatusBuilder(config, jsonLibrary); PNStatus status = statusBuilder.CreateStatusResponse <PNSetStateResult>(PNOperationType.PNSetStateOperation, PNStatusCategory.PNUnknownCategory, null, (int)System.Net.HttpStatusCode.NotModified, null); Announce(status); return; } if (currentChannelUserState.Trim() == "") { currentChannelUserState = "{}"; } if (currentChannelGroupUserState == "") { currentChannelGroupUserState = "{}"; } SharedSetUserState(channels, channelGroups, uuid, currentChannelUserState, currentChannelGroupUserState, callback); }
private void Fire(string channel, object message, bool storeInHistory, int ttl, Dictionary <string, object> metaData, Dictionary <string, object> externalQueryParam, PNCallback <PNPublishResult> callback) { if (string.IsNullOrEmpty(channel) || string.IsNullOrEmpty(channel.Trim()) || message == null) { PNStatus status = new PNStatus { Error = true, ErrorData = new PNErrorData("Missing Channel or Message", new ArgumentException("Missing Channel or Message")) }; callback.OnResponse(null, status); return; } if (string.IsNullOrEmpty(config.PublishKey) || string.IsNullOrEmpty(config.PublishKey.Trim()) || config.PublishKey.Length <= 0) { PNStatus status = new PNStatus { Error = true, ErrorData = new PNErrorData("Invalid publish key", new ArgumentException("Invalid publish key")) }; callback.OnResponse(null, status); return; } if (callback == null) { return; } Dictionary <string, string> urlParam = new Dictionary <string, string>(); urlParam.Add("norep", "true"); string requestMethodName = (this.httpPost) ? "POST" : "GET"; IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr, (PubnubInstance != null) ? PubnubInstance.InstanceId : ""); Uri request = urlBuilder.BuildPublishRequest(requestMethodName, "", channel, message, storeInHistory, ttl, metaData, urlParam, externalQueryParam); RequestState <PNPublishResult> requestState = new RequestState <PNPublishResult>(); requestState.Channels = new [] { channel }; requestState.ResponseType = PNOperationType.PNFireOperation; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; string json = ""; if (this.httpPost) { requestState.UsePostMethod = true; Dictionary <string, object> messageEnvelope = new Dictionary <string, object>(); messageEnvelope.Add("message", message); string postMessage = jsonLibrary.SerializeToJsonString(messageEnvelope); UrlProcessRequest(request, requestState, false, postMessage).ContinueWith(r => { json = r.Result.Item1; }, TaskContinuationOptions.ExecuteSynchronously).Wait(); } else { UrlProcessRequest(request, requestState, false).ContinueWith(r => { json = r.Result.Item1; }, TaskContinuationOptions.ExecuteSynchronously).Wait(); } if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse <PNPublishResult>(requestState, json); if (result != null && result.Count >= 3) { int publishStatus; Int32.TryParse(result[0].ToString(), out publishStatus); if (publishStatus == 1) { ProcessResponseCallbacks(result, requestState); } else { PNStatusCategory category = PNStatusCategoryHelper.GetPNStatusCategory(400, result[1].ToString()); PNStatus status = new StatusBuilder(config, jsonLibrary).CreateStatusResponse <PNPublishResult>(PNOperationType.PNFireOperation, category, requestState, 400, new PNException(json)); if (requestState.PubnubCallback != null) { requestState.PubnubCallback.OnResponse(default(PNPublishResult), status); } } } else { ProcessResponseCallbacks(result, requestState); } } }
private void SharedSetUserState(string[] channels, string[] channelGroups, string uuid, string jsonChannelUserState, string jsonChannelGroupUserState, PNCallback <PNSetStateResult> callback) { List <string> channelList = new List <string>(); List <string> channelGroupList = new List <string>(); if (channels != null && channels.Length > 0) { channelList = new List <string>(channels); channelList = channelList.Where(ch => !string.IsNullOrEmpty(ch) && ch.Trim().Length > 0).Distinct <string>().ToList(); channels = channelList.ToArray(); } if (channelGroups != null && channelGroups.Length > 0) { channelGroupList = new List <string>(channelGroups); channelGroupList = channelGroupList.Where(cg => !string.IsNullOrEmpty(cg) && cg.Trim().Length > 0).Distinct <string>().ToList(); channelGroups = channelGroupList.ToArray(); } string commaDelimitedChannels = (channels != null && channels.Length > 0) ? string.Join(",", channels.OrderBy(x => x).ToArray()) : ""; string commaDelimitedChannelGroups = (channelGroups != null && channelGroups.Length > 0) ? string.Join(",", channelGroups.OrderBy(x => x).ToArray()) : ""; if (string.IsNullOrEmpty(uuid)) { uuid = config.Uuid; } Dictionary <string, object> deserializeChannelUserState = jsonLibrary.DeserializeToDictionaryOfObject(jsonChannelUserState); Dictionary <string, object> deserializeChannelGroupUserState = jsonLibrary.DeserializeToDictionaryOfObject(jsonChannelGroupUserState); for (int channelIndex = 0; channelIndex < channelList.Count; channelIndex++) { string currentChannel = channelList[channelIndex]; ChannelUserState.AddOrUpdate(currentChannel.Trim(), deserializeChannelUserState, (oldState, newState) => deserializeChannelUserState); ChannelLocalUserState.AddOrUpdate(currentChannel.Trim(), deserializeChannelUserState, (oldState, newState) => deserializeChannelUserState); } for (int channelGroupIndex = 0; channelGroupIndex < channelGroupList.Count; channelGroupIndex++) { string currentChannelGroup = channelGroupList[channelGroupIndex]; ChannelGroupUserState.AddOrUpdate(currentChannelGroup.Trim(), deserializeChannelGroupUserState, (oldState, newState) => deserializeChannelGroupUserState); ChannelGroupLocalUserState.AddOrUpdate(currentChannelGroup.Trim(), deserializeChannelGroupUserState, (oldState, newState) => deserializeChannelGroupUserState); } string jsonUserState = "{}"; if (jsonChannelUserState == jsonChannelGroupUserState) { jsonUserState = jsonChannelUserState; } else if (jsonChannelUserState == "{}" && jsonChannelGroupUserState != "{}") { jsonUserState = jsonChannelGroupUserState; } else if (jsonChannelUserState != "{}" && jsonChannelGroupUserState == "{}") { jsonUserState = jsonChannelUserState; } else if (jsonChannelUserState != "{}" && jsonChannelGroupUserState != "{}") { jsonUserState = ""; for (int channelIndex = 0; channelIndex < channelList.Count; channelIndex++) { string currentChannel = channelList[channelIndex]; if (jsonUserState == "") { jsonUserState = string.Format("\"{0}\":{{{1}}}", currentChannel, jsonChannelUserState); } else { jsonUserState = string.Format("{0},\"{1}\":{{{2}}}", jsonUserState, currentChannel, jsonChannelUserState); } } for (int channelGroupIndex = 0; channelGroupIndex < channelGroupList.Count; channelGroupIndex++) { string currentChannelGroup = channelGroupList[channelGroupIndex]; if (jsonUserState == "") { jsonUserState = string.Format("\"{0}\":{{{1}}}", currentChannelGroup, jsonChannelGroupUserState); } else { jsonUserState = string.Format("{0},\"{1}\":{{{2}}}", jsonUserState, currentChannelGroup, jsonChannelGroupUserState); } } jsonUserState = string.Format("{{{0}}}", jsonUserState); //jsonUserState = string.Format("{{\"{0}\":{{{1}}},\"{2}\":{{{3}}}}}", channel, jsonChannelUserState, channelGroup, jsonChannelGroupUserState); } IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit); Uri request = urlBuilder.BuildSetUserStateRequest(commaDelimitedChannels, commaDelimitedChannelGroups, uuid, jsonUserState); RequestState <PNSetStateResult> requestState = new RequestState <PNSetStateResult>(); requestState.Channels = channels; requestState.ChannelGroups = channelGroups; requestState.ResponseType = PNOperationType.PNSetStateOperation; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; //Set TerminateSubRequest to true to bounce the long-polling subscribe requests to update user state string json = UrlProcessRequest <PNSetStateResult>(request, requestState, true); if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse <PNSetStateResult>(requestState, json); ProcessResponseCallbacks(result, requestState); } }
public void Async(PNCallback <PNPublishResult> callback) { Execute(callback); }
private void Publish(string channel, object message, bool storeInHistory, int ttl, Dictionary <string, object> metaData, Dictionary <string, object> externalQueryParam, PNCallback <PNPublishResult> callback) { if (string.IsNullOrEmpty(channel) || string.IsNullOrEmpty(channel.Trim()) || message == null) { PNStatus status = new PNStatus(); status.Error = true; status.ErrorData = new PNErrorData("Missing Channel or Message", new ArgumentException("Missing Channel or Message")); callback.OnResponse(null, status); return; } if (string.IsNullOrEmpty(config.PublishKey) || string.IsNullOrEmpty(config.PublishKey.Trim()) || config.PublishKey.Length <= 0) { PNStatus status = new PNStatus(); status.Error = true; status.ErrorData = new PNErrorData("Invalid publish key", new MissingMemberException("Invalid publish key")); callback.OnResponse(null, status); return; } if (callback == null) { return; } IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr); urlBuilder.PubnubInstanceId = (PubnubInstance != null) ? PubnubInstance.InstanceId : ""; Uri request = urlBuilder.BuildPublishRequest(channel, message, storeInHistory, ttl, metaData, httpPost, null, externalQueryParam); RequestState <PNPublishResult> requestState = new RequestState <PNPublishResult>(); requestState.Channels = new [] { channel }; requestState.ResponseType = PNOperationType.PNPublishOperation; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; string json = ""; if (this.httpPost) { requestState.UsePostMethod = true; string postMessage = JsonEncodePublishMsg(message); json = UrlProcessRequest <PNPublishResult>(request, requestState, false, postMessage); } else { json = UrlProcessRequest <PNPublishResult>(request, requestState, false); } if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse <PNPublishResult>(requestState, json); ProcessResponseCallbacks(result, requestState); } CleanUp(); }
public void Async(PNCallback <PNChannelGroupsRemoveChannelResult> callback) { Execute(callback); }
internal void GetChannelsForDevice(PNPushType pushType, string pushToken, Dictionary <string, object> externalQueryParam, PNCallback <PNPushListProvisionsResult> callback) { if (pushToken == null) { throw new ArgumentException("Missing Uri"); } IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr); urlBuilder.PubnubInstanceId = (PubnubInstance != null) ? PubnubInstance.InstanceId : ""; Uri request = urlBuilder.BuildGetChannelsPushRequest(pushType, pushToken, externalQueryParam); RequestState <PNPushListProvisionsResult> requestState = new RequestState <PNPushListProvisionsResult>(); requestState.ResponseType = PNOperationType.PushGet; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; string json = UrlProcessRequest <PNPushListProvisionsResult>(request, requestState, false); if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse <PNPushListProvisionsResult>(requestState, json); ProcessResponseCallbacks(result, requestState); } }
internal void GrantAccess(string[] channels, string[] channelGroups, string[] authKeys, bool read, bool write, bool manage, long ttl, PNCallback <PNAccessManagerGrantResult> callback) { if (string.IsNullOrEmpty(config.SecretKey) || string.IsNullOrEmpty(config.SecretKey.Trim()) || config.SecretKey.Length <= 0) { throw new MissingMemberException("Invalid secret key"); } List <string> channelList = new List <string>(); List <string> channelGroupList = new List <string>(); List <string> authList = new List <string>(); if (channels != null && channels.Length > 0) { channelList = new List <string>(channels); channelList = channelList.Where(ch => !string.IsNullOrEmpty(ch) && ch.Trim().Length > 0).Distinct <string>().ToList(); } if (channelGroups != null && channelGroups.Length > 0) { channelGroupList = new List <string>(channelGroups); channelGroupList = channelGroupList.Where(cg => !string.IsNullOrEmpty(cg) && cg.Trim().Length > 0).Distinct <string>().ToList(); } if (authKeys != null && authKeys.Length > 0) { authList = new List <string>(authKeys); authList = authList.Where(auth => !string.IsNullOrEmpty(auth) && auth.Trim().Length > 0).Distinct <string>().ToList(); } string channelsCommaDelimited = string.Join(",", channelList.ToArray().OrderBy(x => x).ToArray()); string channelGroupsCommaDelimited = string.Join(",", channelGroupList.ToArray().OrderBy(x => x).ToArray()); string authKeysCommaDelimited = string.Join(",", authList.ToArray().OrderBy(x => x).ToArray()); IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr); urlBuilder.PubnubInstanceId = (PubnubInstance != null) ? PubnubInstance.InstanceId : ""; Uri request = urlBuilder.BuildGrantAccessRequest(channelsCommaDelimited, channelGroupsCommaDelimited, authKeysCommaDelimited, read, write, manage, ttl); RequestState <PNAccessManagerGrantResult> requestState = new RequestState <PNAccessManagerGrantResult>(); requestState.Channels = channels; requestState.ChannelGroups = channelGroups; requestState.ResponseType = PNOperationType.PNAccessManagerGrant; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; string json = UrlProcessRequest <PNAccessManagerGrantResult>(request, requestState, false); if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse <PNAccessManagerGrantResult>(requestState, json); ProcessResponseCallbacks(result, requestState); } }
internal void GetChannelsForDevice(PNPushType pushType, string pushToken, PushEnvironment environment, string deviceTopic, Dictionary <string, object> externalQueryParam, PNCallback <PNPushListProvisionsResult> callback) { if (pushToken == null) { throw new ArgumentException("Missing Uri"); } if (pushType == PNPushType.APNS2 && string.IsNullOrEmpty(deviceTopic)) { throw new ArgumentException("Missing Topic"); } IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr, (PubnubInstance != null) ? PubnubInstance.InstanceId : ""); Uri request = urlBuilder.BuildGetChannelsPushRequest("GET", "", pushType, pushToken, environment, deviceTopic, externalQueryParam); RequestState <PNPushListProvisionsResult> requestState = new RequestState <PNPushListProvisionsResult>(); requestState.ResponseType = PNOperationType.PushGet; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; UrlProcessRequest(request, requestState, false).ContinueWith(r => { string json = r.Result.Item1; if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse(requestState, json); ProcessResponseCallbacks(result, requestState); } }, TaskContinuationOptions.ExecuteSynchronously).Wait(); }
public void Async(PNCallback <PNPushAddChannelResult> callback) { Execute(callback); }
private void GetUuidMetadataList(PNPageObject page, int limit, bool includeCount, bool includeCustom, string filter, List <string> sort, Dictionary <string, object> externalQueryParam, PNCallback <PNGetAllUuidMetadataResult> callback) { if (callback == null) { throw new ArgumentException("Missing callback"); } PNPageObject internalPage; if (page == null) { internalPage = new PNPageObject(); } else { internalPage = page; } IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr, (PubnubInstance != null) ? PubnubInstance.InstanceId : ""); Uri request = urlBuilder.BuildGetAllUuidMetadataRequest("GET", "", internalPage.Next, internalPage.Prev, limit, includeCount, includeCustom, filter, sort, externalQueryParam); RequestState <PNGetAllUuidMetadataResult> requestState = new RequestState <PNGetAllUuidMetadataResult>(); requestState.ResponseType = PNOperationType.PNGetAllUuidMetadataOperation; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; requestState.UsePostMethod = false; UrlProcessRequest(request, requestState, false).ContinueWith(r => { string json = r.Result.Item1; if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse(requestState, json); ProcessResponseCallbacks(result, requestState); } }, TaskContinuationOptions.ExecuteSynchronously).Wait(); }
internal void GetUserState(string[] channels, string[] channelGroups, string uuid, PNCallback <PNGetStateResult> callback) { if ((channels == null && channelGroups == null) || (channels != null && channelGroups != null && channels.Length == 0 && channelGroups.Length == 0)) { throw new ArgumentException("Either Channel Or Channel Group or Both should be provided"); } if ((channels == null && channelGroups != null) || (channels.Length == 0 && channelGroups.Length == 0)) { throw new ArgumentException("Either Channel Or Channel Group or Both should be provided."); } if (string.IsNullOrEmpty(uuid) || uuid.Trim().Length == 0) { uuid = config.Uuid; } string channelsCommaDelimited = (channels != null && channels.Length > 0) ? string.Join(",", channels.OrderBy(x => x).ToArray()) : ""; string channelGroupsCommaDelimited = (channelGroups != null && channelGroups.Length > 0) ? string.Join(",", channelGroups.OrderBy(x => x).ToArray()) : ""; IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog); urlBuilder.PubnubInstanceId = (PubnubInstance != null) ? PubnubInstance.InstanceId : ""; Uri request = urlBuilder.BuildGetUserStateRequest(channelsCommaDelimited, channelGroupsCommaDelimited, uuid); RequestState <PNGetStateResult> requestState = new RequestState <PNGetStateResult>(); requestState.Channels = channels; requestState.ChannelGroups = channelGroups; requestState.ResponseType = PNOperationType.PNGetStateOperation; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; string json = UrlProcessRequest <PNGetStateResult>(request, requestState, false); if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse <PNGetStateResult>(requestState, json); ProcessResponseCallbacks(result, requestState); } }
private void Signal(string channel, object message, Dictionary <string, object> metaData, Dictionary <string, object> externalQueryParam, PNCallback <PNPublishResult> callback) { if (string.IsNullOrEmpty(channel) || string.IsNullOrEmpty(channel.Trim()) || message == null) { PNStatus status = new PNStatus { Error = true, ErrorData = new PNErrorData("Missing Channel or Message", new ArgumentException("Missing Channel or Message")) }; callback.OnResponse(null, status); return; } if (string.IsNullOrEmpty(config.PublishKey) || string.IsNullOrEmpty(config.PublishKey.Trim()) || config.PublishKey.Length <= 0) { PNStatus status = new PNStatus { Error = true, ErrorData = new PNErrorData("Invalid publish key", new ArgumentException("Invalid publish key")) }; callback.OnResponse(null, status); return; } if (string.IsNullOrEmpty(config.SubscribeKey) || string.IsNullOrEmpty(config.SubscribeKey.Trim()) || config.SubscribeKey.Length <= 0) { PNStatus status = new PNStatus { Error = true, ErrorData = new PNErrorData("Invalid subscribe key", new ArgumentException("Invalid subscribe key")) }; callback.OnResponse(null, status); return; } IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr, (PubnubInstance != null) ? PubnubInstance.InstanceId : ""); Uri request = urlBuilder.BuildSignalRequest("GET", "", channel, message, metaData, externalQueryParam); RequestState <PNPublishResult> requestState = new RequestState <PNPublishResult>(); requestState.Channels = new[] { channel }; requestState.ResponseType = PNOperationType.PNSignalOperation; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; UrlProcessRequest(request, requestState, false).ContinueWith(r => { string json = r.Result.Item1; if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse(requestState, json); if (result != null && result.Count >= 3) { int signalStatus; Int32.TryParse(result[0].ToString(), out signalStatus); if (signalStatus == 1) { ProcessResponseCallbacks(result, requestState); } else { PNStatusCategory category = PNStatusCategoryHelper.GetPNStatusCategory(400, result[1].ToString()); PNStatus status = new StatusBuilder(config, jsonLibrary).CreateStatusResponse <PNPublishResult>(PNOperationType.PNSignalOperation, category, requestState, 400, new PNException(json)); if (requestState.PubnubCallback != null) { requestState.PubnubCallback.OnResponse(default(PNPublishResult), status); } } } else { ProcessResponseCallbacks(result, requestState); } } }, TaskContinuationOptions.ExecuteSynchronously).Wait(); }
private void GetMessageActions(string channel, long start, long end, int limit, Dictionary <string, object> externalQueryParam, PNCallback <PNGetMessageActionsResult> callback) { if (string.IsNullOrEmpty(channel) || string.IsNullOrEmpty(channel.Trim())) { PNStatus status = new PNStatus(); status.Error = true; status.ErrorData = new PNErrorData("Missing Channel or MessageAction", new ArgumentException("Missing Channel or MessageAction")); callback.OnResponse(null, status); return; } if (string.IsNullOrEmpty(config.SubscribeKey) || string.IsNullOrEmpty(config.SubscribeKey.Trim()) || config.SubscribeKey.Length <= 0) { PNStatus status = new PNStatus(); status.Error = true; status.ErrorData = new PNErrorData("Invalid subscribe key", new MissingMemberException("Invalid publish key")); callback.OnResponse(null, status); return; } if (callback == null) { return; } IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr, (PubnubInstance != null) ? PubnubInstance.InstanceId : ""); Uri request = urlBuilder.BuildGetMessageActionsRequest("GET", "", channel, start, end, limit, externalQueryParam); RequestState <PNGetMessageActionsResult> requestState = new RequestState <PNGetMessageActionsResult>(); requestState.Channels = new[] { channel }; requestState.ResponseType = PNOperationType.PNGetMessageActionsOperation; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; UrlProcessRequest(request, requestState, false).ContinueWith(r => { string json = r.Result.Item1; if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse(requestState, json); ProcessResponseCallbacks(result, requestState); } CleanUp(); }, TaskContinuationOptions.ExecuteSynchronously).Wait(); }
private void ProcessMembersOperationRequest(string spaceId, List <PNChannelMember> setMemberList, List <string> removeMemberList, PNPageObject page, int limit, bool includeCount, string includeOptions, List <string> sort, Dictionary <string, object> externalQueryParam, PNCallback <PNChannelMembersResult> callback) { PNPageObject internalPage; if (page == null) { internalPage = new PNPageObject(); } else { internalPage = page; } RequestState <PNChannelMembersResult> requestState = new RequestState <PNChannelMembersResult>(); requestState.ResponseType = PNOperationType.PNManageChannelMembersOperation; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; requestState.UsePatchMethod = true; Dictionary <string, object> messageEnvelope = new Dictionary <string, object>(); if (setMemberList != null) { List <Dictionary <string, object> > setMemberFormatList = new List <Dictionary <string, object> >(); for (int index = 0; index < setMemberList.Count; index++) { Dictionary <string, object> currentMemberFormat = new Dictionary <string, object>(); currentMemberFormat.Add("uuid", new Dictionary <string, string> { { "id", setMemberList[index].Uuid } }); if (setMemberList[index].Custom != null) { currentMemberFormat.Add("custom", setMemberList[index].Custom); } setMemberFormatList.Add(currentMemberFormat); } if (setMemberFormatList.Count > 0) { messageEnvelope.Add("set", setMemberFormatList); } } if (removeMemberList != null) { List <Dictionary <string, Dictionary <string, string> > > removeMemberFormatList = new List <Dictionary <string, Dictionary <string, string> > >(); for (int index = 0; index < removeMemberList.Count; index++) { Dictionary <string, Dictionary <string, string> > currentMemberFormat = new Dictionary <string, Dictionary <string, string> >(); if (!string.IsNullOrEmpty(removeMemberList[index])) { currentMemberFormat.Add("uuid", new Dictionary <string, string> { { "id", removeMemberList[index] } }); removeMemberFormatList.Add(currentMemberFormat); } } if (removeMemberFormatList.Count > 0) { messageEnvelope.Add("delete", removeMemberFormatList); } } string patchMessage = jsonLibrary.SerializeToJsonString(messageEnvelope); IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr, (PubnubInstance != null) ? PubnubInstance.InstanceId : ""); Uri request = urlBuilder.BuildMemberAddUpdateRemoveChannelRequest("PATCH", patchMessage, spaceId, internalPage.Next, internalPage.Prev, limit, includeCount, includeOptions, sort, externalQueryParam); UrlProcessRequest(request, requestState, false, patchMessage).ContinueWith(r => { string json = r.Result.Item1; if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse(requestState, json); ProcessResponseCallbacks(result, requestState); } else { if (r.Result.Item2 != null) { callback.OnResponse(null, r.Result.Item2); } } }, TaskContinuationOptions.ExecuteSynchronously).Wait(); }
private void UpdateSpaceMembershipWithUser(string userId, List <PNMembership> addMembership, List <PNMembership> updateMembership, List <string> removeMembership, Dictionary <string, object> custom, PNPage page, int limit, bool includeCount, string includeOptions, Dictionary <string, object> externalQueryParam, PNCallback <PNMembershipsResult> callback) { if (string.IsNullOrEmpty(userId) || string.IsNullOrEmpty(userId.Trim())) { throw new ArgumentException("Missing Id"); } if (string.IsNullOrEmpty(config.SubscribeKey) || string.IsNullOrEmpty(config.SubscribeKey.Trim()) || config.SubscribeKey.Length <= 0) { throw new MissingMemberException("Invalid subscribe key"); } if (callback == null) { throw new ArgumentException("Missing userCallback"); } PNPage internalPage; if (page == null) { internalPage = new PNPage(); } else { internalPage = page; } IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr); urlBuilder.PubnubInstanceId = (PubnubInstance != null) ? PubnubInstance.InstanceId : ""; Uri request = urlBuilder.BuildUpdateSpaceMembershipsWithUserRequest(userId, internalPage.Next, internalPage.Prev, limit, includeCount, includeOptions, externalQueryParam); RequestState <PNMembershipsResult> requestState = new RequestState <PNMembershipsResult>(); requestState.ResponseType = PNOperationType.PNMembershipsOperation; requestState.PubnubCallback = callback; requestState.Reconnect = false; requestState.EndPointOperation = this; string json = ""; requestState.UsePatchMethod = true; Dictionary <string, object> messageEnvelope = new Dictionary <string, object>(); if (addMembership != null) { messageEnvelope.Add("add", addMembership); } if (updateMembership != null) { messageEnvelope.Add("update", updateMembership); } if (removeMembership != null) { List <PNDeleteMembership> removeMbrshipFormat = new List <PNDeleteMembership>(); for (int index = 0; index < removeMembership.Count; index++) { if (!string.IsNullOrEmpty(removeMembership[index])) { removeMbrshipFormat.Add(new PNDeleteMembership { SpaceId = removeMembership[index] }); } } messageEnvelope.Add("remove", removeMbrshipFormat); } if (custom != null) { messageEnvelope.Add("custom", custom); } string patchMessage = jsonLibrary.SerializeToJsonString(messageEnvelope); json = UrlProcessRequest <PNMembershipsResult>(request, requestState, false, patchMessage); if (!string.IsNullOrEmpty(json)) { List <object> result = ProcessJsonResponse <PNMembershipsResult>(requestState, json); ProcessResponseCallbacks(result, requestState); } }