private async Task <PNResult <PNPublishResult> > Signal(string channel, object message, Dictionary <string, object> metaData, Dictionary <string, object> externalQueryParam) { PNResult <PNPublishResult> ret = new PNResult <PNPublishResult>(); if (string.IsNullOrEmpty(channel) || string.IsNullOrEmpty(channel.Trim()) || message == null) { PNStatus errStatus = new PNStatus { Error = true, ErrorData = new PNErrorData("Missing Channel or Message", new ArgumentException("Missing Channel or Message")) }; ret.Status = errStatus; return(ret); } if (string.IsNullOrEmpty(config.PublishKey) || string.IsNullOrEmpty(config.PublishKey.Trim()) || config.PublishKey.Length <= 0) { PNStatus errStatus = new PNStatus { Error = true, ErrorData = new PNErrorData("Invalid publish key", new ArgumentException("Invalid publish key")) }; ret.Status = errStatus; return(ret); } if (string.IsNullOrEmpty(config.SubscribeKey) || string.IsNullOrEmpty(config.SubscribeKey.Trim()) || config.SubscribeKey.Length <= 0) { PNStatus errStatus = new PNStatus { Error = true, ErrorData = new PNErrorData("Invalid subscribe key", new ArgumentException("Invalid subscribe key")) }; ret.Status = errStatus; return(ret); } 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.Reconnect = false; requestState.EndPointOperation = this; Tuple <string, PNStatus> JsonAndStatusTuple = await UrlProcessRequest(request, requestState, false).ConfigureAwait(false); ret.Status = JsonAndStatusTuple.Item2; string json = JsonAndStatusTuple.Item1; 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) { List <object> resultList = ProcessJsonResponse(requestState, json); if (resultList != null && resultList.Count > 0) { ResponseBuilder responseBuilder = new ResponseBuilder(config, jsonLibrary, pubnubLog); PNPublishResult responseResult = responseBuilder.JsonToObject <PNPublishResult>(resultList, true); if (responseResult != null) { ret.Result = responseResult; } } 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)); ret.Status = status; ret.Result = default(PNPublishResult); } } } } return(ret); }
private async Task <PNResult <PNPublishResult> > Fire(string channel, object message, bool storeInHistory, int ttl, Dictionary <string, object> metaData, Dictionary <string, object> externalQueryParam) { PNResult <PNPublishResult> ret = new PNResult <PNPublishResult>(); if (string.IsNullOrEmpty(channel) || string.IsNullOrEmpty(channel.Trim()) || message == null) { PNStatus errStatus = new PNStatus { Error = true, ErrorData = new PNErrorData("Missing Channel or Message", new ArgumentException("Missing Channel or Message")) }; ret.Status = errStatus; return(ret); } if (string.IsNullOrEmpty(config.PublishKey) || string.IsNullOrEmpty(config.PublishKey.Trim()) || config.PublishKey.Length <= 0) { PNStatus errStatus = new PNStatus { Error = true, ErrorData = new PNErrorData("Invalid publish key", new ArgumentException("Invalid publish key")) }; ret.Status = errStatus; return(ret); } 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.Reconnect = false; requestState.EndPointOperation = this; Tuple <string, PNStatus> JsonAndStatusTuple; if (this.httpPost) { requestState.UsePostMethod = true; Dictionary <string, object> messageEnvelope = new Dictionary <string, object>(); messageEnvelope.Add("message", message); string postMessage = jsonLibrary.SerializeToJsonString(messageEnvelope); JsonAndStatusTuple = await UrlProcessRequest(request, requestState, false, postMessage).ConfigureAwait(false); } else { JsonAndStatusTuple = await UrlProcessRequest(request, requestState, false).ConfigureAwait(false); } ret.Status = JsonAndStatusTuple.Item2; string json = JsonAndStatusTuple.Item1; 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) { List <object> resultList = ProcessJsonResponse(requestState, json); if (resultList != null && resultList.Count > 0) { ResponseBuilder responseBuilder = new ResponseBuilder(config, jsonLibrary, pubnubLog); PNPublishResult responseResult = responseBuilder.JsonToObject <PNPublishResult>(resultList, true); if (responseResult != null) { ret.Result = responseResult; } } } } } return(ret); }