private void DoHandshake(Uri uri, string resource, HandshakeFinishedHandler handler) { var query = uri.Query + (string.IsNullOrEmpty(uri.Query) ? "?" : "&") + "t=" + Math.Round((DateTimeOffset.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds, 0); var handshakeUrl = string.Format("{0}://{1}:{2}/{4}/1/{3}", uri.Scheme, uri.Host, uri.Port, query, resource); var request = m_connectionFactory.CreateHttpRequest(handshakeUrl); request.HttpGetResponse += (a) => FinishHandshake(a, handler); request.Execute(); }
private void FinishHandshake(string responseText, HandshakeFinishedHandler handler) { try { var resultParts = responseText.Split(new[] { ':' }); Id = resultParts[0]; HeartbeatTimeout = Int32.Parse(resultParts[1]) * 1000; } catch (WebException we) { if (we.Status == WebExceptionStatus.ProtocolError) { var resp = we.Response as HttpWebResponse; if (resp != null && resp.StatusCode == HttpStatusCode.Forbidden) { handler(HandshakeResult.Forbidden); return; } } handler(HandshakeResult.Error); return; } catch (Exception) { EmitLocally("error", responseText); handler(HandshakeResult.Error); return; } handler(HandshakeResult.Success); }