protected override sealed void SendRequestAndGetResult <T> (Uri requestUri, RequestState <T> pubnubRequestState, PubnubWebRequest request) { #if (SILVERLIGHT || WINDOWS_PHONE) //For WP7, Ensure that the RequestURI length <= 1599 //For SL, Ensure that the RequestURI length <= 1482 for Large Text Message. If RequestURI Length < 1343, Successful Publish occurs IAsyncResult asyncResult = request.BeginGetResponse(new AsyncCallback(UrlProcessResponseCallback <T>), pubnubRequestState); Timer webRequestTimer = new Timer(OnPubnubWebRequestTimeout <T>, pubnubRequestState, GetTimeoutInSecondsForResponseType(pubnubRequestState.Type) * 1000, Timeout.Infinite); #else IAsyncResult asyncResult = request.BeginGetResponse(new AsyncCallback(UrlProcessResponseCallback <T>), pubnubRequestState); ThreadPool.RegisterWaitForSingleObject(asyncResult.AsyncWaitHandle, new WaitOrTimerCallback(OnPubnubWebRequestTimeout <T>), pubnubRequestState, GetTimeoutInSecondsForResponseType(pubnubRequestState.Type) * 1000, true); #endif if (pubnubRequestState.Type == ResponseType.Presence || pubnubRequestState.Type == ResponseType.Subscribe) { if (presenceHeartbeatTimer != null) { presenceHeartbeatTimer.Dispose(); presenceHeartbeatTimer = null; } if (pubnubRequestState.Channels != null && pubnubRequestState.Channels.Length > 0 && pubnubRequestState.Channels.Where(s => s.Contains("-pnpres") == false).ToArray().Length > 0) { RequestState <T> presenceHeartbeatState = new RequestState <T>(); presenceHeartbeatState.Channels = pubnubRequestState.Channels; presenceHeartbeatState.Type = ResponseType.PresenceHeartbeat; presenceHeartbeatState.ErrorCallback = pubnubRequestState.ErrorCallback; presenceHeartbeatState.Request = null; presenceHeartbeatState.Response = null; if (base.PresenceHeartbeatInterval > 0) { presenceHeartbeatTimer = new Timer(OnPresenceHeartbeatIntervalTimeout <T>, presenceHeartbeatState, base.PresenceHeartbeatInterval * 1000, base.PresenceHeartbeatInterval * 1000); } } } }
protected override sealed void SendRequestAndGetResult <T> (Uri requestUri, RequestState <T> pubnubRequestState, PubnubWebRequest request) { if ((pubnubRequestState.Type == ResponseType.Publish) && (RequestIsUnsafe(requestUri))) { SendRequestUsingTcpClient <T> (requestUri, pubnubRequestState); } else { IAsyncResult asyncResult = request.BeginGetResponse(new AsyncCallback(UrlProcessResponseCallback <T>), pubnubRequestState); if (!asyncResult.AsyncWaitHandle.WaitOne(GetTimeoutInSecondsForResponseType(pubnubRequestState.Type) * 1000)) { OnPubnubWebRequestTimeout <T> (pubnubRequestState, true); } } }