Closed kenjiuno closed 4 years ago
Better implementation so that it can find proxy server automatically:
pusher = new Pusher(applicationKey, new PusherOptions()
{
Authorizer = ...,
Encrypted = true,
ProxyFactory = (uri) =>
{
var proxyUri = UseProxy
? ProxyDetector.Detect(uri)
: null;
var proxy = (proxyUri != null)
? new HttpConnectProxy(new DnsEndPoint(proxyUri.Host, proxyUri.Port))
: null;
return proxy;
},
});
static class ProxyDetector
{
public static Uri Detect(string uri)
{
UriBuilder urib = new UriBuilder(uri);
switch (urib.Scheme)
{
case "ws":
urib.Port = 80;
urib.Scheme = "http";
break;
case "wss":
urib.Port = 443;
urib.Scheme = "https";
break;
}
Uri uriTarget = urib.Uri;
Uri uriProxy = System.Net.HttpWebRequest.DefaultWebProxy.GetProxy(uriTarget);
if (uriProxy != null && uriProxy != uriTarget)
{
return uriProxy;
}
return null;
}
}
This PR will add
PusherOptions.ProxyFactory
property so that we can specify proxy server manually.I'm pending some PRs on SuperSocket.ClientEngine project which provides HttpConnectProxy I want to use.
Fix #11