@@ -205,67 +205,81 @@ internal void Publish(string channel, object message, bool storeInHistory, int t
205205 return ;
206206 }
207207
208- string requestMethodName = ( this . httpPost ) ? "POST" : "GET" ;
209- IUrlRequestBuilder urlBuilder = new UrlRequestBuilder ( config , jsonLibrary , unit , pubnubLog , pubnubTelemetryMgr , ( PubnubInstance != null && ! string . IsNullOrEmpty ( PubnubInstance . InstanceId ) && PubnubTokenMgrCollection . ContainsKey ( PubnubInstance . InstanceId ) ) ? PubnubTokenMgrCollection [ PubnubInstance . InstanceId ] : null , ( PubnubInstance != null ) ? PubnubInstance . InstanceId : "" ) ;
210-
211- Uri request = urlBuilder . BuildPublishRequest ( requestMethodName , "" , channel , message , storeInHistory , ttl , metaData , null , externalQueryParam ) ;
212-
213208 RequestState < PNPublishResult > requestState = new RequestState < PNPublishResult > ( ) ;
214- requestState . Channels = new [ ] { channel } ;
215- requestState . ResponseType = PNOperationType . PNPublishOperation ;
216- requestState . PubnubCallback = callback ;
217- requestState . Reconnect = false ;
218- requestState . EndPointOperation = this ;
209+ try
210+ {
211+ string requestMethodName = ( this . httpPost ) ? "POST" : "GET" ;
212+ IUrlRequestBuilder urlBuilder = new UrlRequestBuilder ( config , jsonLibrary , unit , pubnubLog , pubnubTelemetryMgr , ( PubnubInstance != null && ! string . IsNullOrEmpty ( PubnubInstance . InstanceId ) && PubnubTokenMgrCollection . ContainsKey ( PubnubInstance . InstanceId ) ) ? PubnubTokenMgrCollection [ PubnubInstance . InstanceId ] : null , ( PubnubInstance != null ) ? PubnubInstance . InstanceId : "" ) ;
219213
220- string json = "" ;
214+ Uri request = urlBuilder . BuildPublishRequest ( requestMethodName , "" , channel , message , storeInHistory , ttl , metaData , null , externalQueryParam ) ;
221215
222- if ( this . httpPost )
223- {
224- requestState . UsePostMethod = true ;
225- string postMessage = JsonEncodePublishMsg ( message ) ;
226- byte [ ] postData = Encoding . UTF8 . GetBytes ( postMessage ) ;
227- UrlProcessRequest < PNPublishResult > ( request , requestState , false , postData ) . ContinueWith ( r =>
216+ requestState . Channels = new [ ] { channel } ;
217+ requestState . ResponseType = PNOperationType . PNPublishOperation ;
218+ requestState . PubnubCallback = callback ;
219+ requestState . Reconnect = false ;
220+ requestState . EndPointOperation = this ;
221+
222+ string json = "" ;
223+
224+ if ( this . httpPost )
228225 {
229- json = r . Result . Item1 ;
230- } , TaskContinuationOptions . ExecuteSynchronously ) . Wait ( ) ;
231- }
232- else
233- {
234- UrlProcessRequest < PNPublishResult > ( request , requestState , false ) . ContinueWith ( r =>
226+ requestState . UsePostMethod = true ;
227+ string postMessage = JsonEncodePublishMsg ( message ) ;
228+ byte [ ] postData = Encoding . UTF8 . GetBytes ( postMessage ) ;
229+ UrlProcessRequest < PNPublishResult > ( request , requestState , false , postData ) . ContinueWith ( r =>
230+ {
231+ json = r . Result . Item1 ;
232+ } , TaskContinuationOptions . ExecuteSynchronously ) . Wait ( ) ;
233+ }
234+ else
235235 {
236- json = r . Result . Item1 ;
237- } , TaskContinuationOptions . ExecuteSynchronously ) . Wait ( ) ;
238- }
239-
240- if ( ! string . IsNullOrEmpty ( json ) )
241- {
242- List < object > result = ProcessJsonResponse ( requestState , json ) ;
236+ UrlProcessRequest < PNPublishResult > ( request , requestState , false ) . ContinueWith ( r =>
237+ {
238+ json = r . Result . Item1 ;
239+ } , TaskContinuationOptions . ExecuteSynchronously ) . Wait ( ) ;
240+ }
243241
244- if ( result != null && result . Count >= 3 )
242+ if ( ! string . IsNullOrEmpty ( json ) )
245243 {
246- int publishStatus ;
247- Int32 . TryParse ( result [ 0 ] . ToString ( ) , out publishStatus ) ;
248- if ( publishStatus == 1 )
244+ List < object > result = ProcessJsonResponse ( requestState , json ) ;
245+
246+ if ( result != null && result . Count >= 3 )
249247 {
250- ProcessResponseCallbacks ( result , requestState ) ;
248+ int publishStatus ;
249+ Int32 . TryParse ( result [ 0 ] . ToString ( ) , out publishStatus ) ;
250+ if ( publishStatus == 1 )
251+ {
252+ ProcessResponseCallbacks ( result , requestState ) ;
253+ }
254+ else
255+ {
256+ PNStatusCategory category = PNStatusCategoryHelper . GetPNStatusCategory ( 400 , result [ 1 ] . ToString ( ) ) ;
257+ PNStatus status = new StatusBuilder ( config , jsonLibrary ) . CreateStatusResponse < PNPublishResult > ( PNOperationType . PNPublishOperation , category , requestState , 400 , new PNException ( json ) ) ;
258+ if ( requestState . PubnubCallback != null )
259+ {
260+ requestState . PubnubCallback . OnResponse ( default ( PNPublishResult ) , status ) ;
261+ }
262+ }
251263 }
252264 else
253265 {
254- PNStatusCategory category = PNStatusCategoryHelper . GetPNStatusCategory ( 400 , result [ 1 ] . ToString ( ) ) ;
255- PNStatus status = new StatusBuilder ( config , jsonLibrary ) . CreateStatusResponse < PNPublishResult > ( PNOperationType . PNPublishOperation , category , requestState , 400 , new PNException ( json ) ) ;
256- if ( requestState . PubnubCallback != null )
257- {
258- requestState . PubnubCallback . OnResponse ( default ( PNPublishResult ) , status ) ;
259- }
266+ ProcessResponseCallbacks ( result , requestState ) ;
260267 }
261268 }
262- else
269+
270+ CleanUp ( ) ;
271+ }
272+ catch ( Exception ex )
273+ {
274+ int statusCode = PNStatusCodeHelper . GetHttpStatusCode ( ex . ToString ( ) ) ;
275+ PNStatusCategory category = PNStatusCategoryHelper . GetPNStatusCategory ( statusCode , ex . ToString ( ) ) ;
276+ PNStatus status = new StatusBuilder ( config , jsonLibrary ) . CreateStatusResponse ( PNOperationType . PNPublishOperation , category , requestState , statusCode , new PNException ( ex . ToString ( ) ) ) ;
277+ if ( requestState . PubnubCallback != null )
263278 {
264- ProcessResponseCallbacks ( result , requestState ) ;
279+ requestState . PubnubCallback . OnResponse ( default ( PNPublishResult ) , status ) ;
265280 }
266- }
267281
268- CleanUp ( ) ;
282+ }
269283 }
270284
271285 internal async Task < PNResult < PNPublishResult > > Publish ( string channel , object message , bool storeInHistory , int ttl , Dictionary < string , object > metaData , Dictionary < string , object > externalQueryParam )
@@ -290,56 +304,66 @@ internal async Task<PNResult<PNPublishResult>> Publish(string channel, object me
290304 return ret ;
291305 }
292306
293- string requestMethodName = ( this . httpPost ) ? "POST" : "GET" ;
294- IUrlRequestBuilder urlBuilder = new UrlRequestBuilder ( config , jsonLibrary , unit , pubnubLog , pubnubTelemetryMgr , ( PubnubInstance != null && ! string . IsNullOrEmpty ( PubnubInstance . InstanceId ) && PubnubTokenMgrCollection . ContainsKey ( PubnubInstance . InstanceId ) ) ? PubnubTokenMgrCollection [ PubnubInstance . InstanceId ] : null , ( PubnubInstance != null ) ? PubnubInstance . InstanceId : "" ) ;
295-
296- Uri request = urlBuilder . BuildPublishRequest ( requestMethodName , "" , channel , message , storeInHistory , ttl , metaData , null , externalQueryParam ) ;
297-
298307 RequestState < PNPublishResult > requestState = new RequestState < PNPublishResult > ( ) ;
299- requestState . Channels = new [ ] { channel } ;
300- requestState . ResponseType = PNOperationType . PNPublishOperation ;
301- requestState . Reconnect = false ;
302- requestState . EndPointOperation = this ;
308+ try
309+ {
310+ string requestMethodName = ( this . httpPost ) ? "POST" : "GET" ;
311+ IUrlRequestBuilder urlBuilder = new UrlRequestBuilder ( config , jsonLibrary , unit , pubnubLog , pubnubTelemetryMgr , ( PubnubInstance != null && ! string . IsNullOrEmpty ( PubnubInstance . InstanceId ) && PubnubTokenMgrCollection . ContainsKey ( PubnubInstance . InstanceId ) ) ? PubnubTokenMgrCollection [ PubnubInstance . InstanceId ] : null , ( PubnubInstance != null ) ? PubnubInstance . InstanceId : "" ) ;
303312
304- Tuple < string , PNStatus > JsonAndStatusTuple ;
313+ Uri request = urlBuilder . BuildPublishRequest ( requestMethodName , "" , channel , message , storeInHistory , ttl , metaData , null , externalQueryParam ) ;
305314
306- if ( this . httpPost )
307- {
308- requestState . UsePostMethod = true ;
309- string postMessage = JsonEncodePublishMsg ( message ) ;
310- byte [ ] postData = Encoding . UTF8 . GetBytes ( postMessage ) ;
311- JsonAndStatusTuple = await UrlProcessRequest ( request , requestState , false , postData ) . ConfigureAwait ( false ) ;
312- }
313- else
314- {
315- JsonAndStatusTuple = await UrlProcessRequest ( request , requestState , false ) . ConfigureAwait ( false ) ;
316- }
317- ret . Status = JsonAndStatusTuple . Item2 ;
318- string json = JsonAndStatusTuple . Item1 ;
315+ requestState . Channels = new [ ] { channel } ;
316+ requestState . ResponseType = PNOperationType . PNPublishOperation ;
317+ requestState . Reconnect = false ;
318+ requestState . EndPointOperation = this ;
319319
320- if ( ! string . IsNullOrEmpty ( json ) )
321- {
322- List < object > result = ProcessJsonResponse ( requestState , json ) ;
320+ Tuple < string , PNStatus > JsonAndStatusTuple ;
321+
322+ if ( this . httpPost )
323+ {
324+ requestState . UsePostMethod = true ;
325+ string postMessage = JsonEncodePublishMsg ( message ) ;
326+ byte [ ] postData = Encoding . UTF8 . GetBytes ( postMessage ) ;
327+ JsonAndStatusTuple = await UrlProcessRequest ( request , requestState , false , postData ) . ConfigureAwait ( false ) ;
328+ }
329+ else
330+ {
331+ JsonAndStatusTuple = await UrlProcessRequest ( request , requestState , false ) . ConfigureAwait ( false ) ;
332+ }
333+ ret . Status = JsonAndStatusTuple . Item2 ;
334+ string json = JsonAndStatusTuple . Item1 ;
323335
324- if ( result != null && result . Count >= 3 )
336+ if ( ! string . IsNullOrEmpty ( json ) )
325337 {
326- int publishStatus ;
327- Int32 . TryParse ( result [ 0 ] . ToString ( ) , out publishStatus ) ;
328- if ( publishStatus == 1 )
338+ List < object > result = ProcessJsonResponse ( requestState , json ) ;
339+
340+ if ( result != null && result . Count >= 3 )
329341 {
330- List < object > resultList = ProcessJsonResponse ( requestState , json ) ;
331- if ( resultList != null && resultList . Count > 0 )
342+ int publishStatus ;
343+ Int32 . TryParse ( result [ 0 ] . ToString ( ) , out publishStatus ) ;
344+ if ( publishStatus == 1 )
332345 {
333- ResponseBuilder responseBuilder = new ResponseBuilder ( config , jsonLibrary , pubnubLog ) ;
334- PNPublishResult responseResult = responseBuilder . JsonToObject < PNPublishResult > ( resultList , true ) ;
335- if ( responseResult != null )
346+ List < object > resultList = ProcessJsonResponse ( requestState , json ) ;
347+ if ( resultList != null && resultList . Count > 0 )
336348 {
337- ret . Result = responseResult ;
349+ ResponseBuilder responseBuilder = new ResponseBuilder ( config , jsonLibrary , pubnubLog ) ;
350+ PNPublishResult responseResult = responseBuilder . JsonToObject < PNPublishResult > ( resultList , true ) ;
351+ if ( responseResult != null )
352+ {
353+ ret . Result = responseResult ;
354+ }
338355 }
339356 }
340357 }
341358 }
342359 }
360+ catch ( Exception ex )
361+ {
362+ int statusCode = PNStatusCodeHelper . GetHttpStatusCode ( ex . ToString ( ) ) ;
363+ PNStatusCategory category = PNStatusCategoryHelper . GetPNStatusCategory ( statusCode , ex . ToString ( ) ) ;
364+ PNStatus status = new StatusBuilder ( config , jsonLibrary ) . CreateStatusResponse ( PNOperationType . PNPublishOperation , category , requestState , statusCode , new PNException ( ex . ToString ( ) ) ) ;
365+ ret . Status = status ;
366+ }
343367
344368 return ret ;
345369 }
0 commit comments