public IPromise<IRemoteConnection> Clone(bool async) { var newConn = new ProxyServerConnection(_service, _endpoints); newConn.SessionPolicy = this.SessionPolicy; newConn._defaults = this._defaults; return newConn.Login(_lastCredentials, async) .Convert(u => (IRemoteConnection)newConn); }
/// <summary> /// Asynchronously gets an HTTP connection to an innovator instance (or proxy) at the given URL /// </summary> /// <param name="url">URL of the innovator instance (or proxy)</param> /// <param name="preferences">Object containing preferences for the connection</param> /// <returns>A promise to return a connection object</returns> public static IPromise<IRemoteConnection> GetConnection(string url , ConnectionPreferences preferences, bool async) { url = (url ?? "").TrimEnd('/'); if (!url.EndsWith("/server", StringComparison.OrdinalIgnoreCase)) url += "/Server"; var configUrl = url + "/mapping.xml"; var masterService = preferences.HttpService ?? DefaultService.Invoke(); var arasSerice = preferences.HttpService ?? new DefaultHttpService() { Compression = CompressionType.none }; Func<ServerMapping, IRemoteConnection> connFactory = m => { var uri = (m.Url ?? "").TrimEnd('/'); if (!uri.EndsWith("/server", StringComparison.OrdinalIgnoreCase)) url += "/Server"; switch (m.Type) { case ServerType.Proxy: m.Endpoints.Base = new Uri(uri + "/"); var conn = new Connection.ProxyServerConnection(masterService, m.Endpoints); conn.SessionPolicy = preferences.SessionPolicy; if (!string.IsNullOrEmpty(preferences.UserAgent)) conn.DefaultSettings(req => req.UserAgent = preferences.UserAgent); return conn; default: return ArasConn(arasSerice, uri, preferences); } }; var result = new Promise<IRemoteConnection>(); result.CancelTarget(masterService.Execute("GET", configUrl, null, CredentialCache.DefaultCredentials , async, request => { request.UserAgent = preferences.UserAgent; request.SetHeader("Accept", "text/xml"); }).Progress((p, m) => result.Notify(p, m)) .Done(r => { var data = r.AsString(); if (string.IsNullOrEmpty(data)) { result.Resolve(ArasConn(arasSerice, url, preferences)); } else { try { var servers = ServerMapping.FromXml(data).ToArray(); if (servers.Length < 1) { result.Resolve(ArasConn(arasSerice, url, preferences)); } else if (servers.Length == 1) { result.Resolve(connFactory(servers.Single())); } else { foreach (var server in servers) { server.Factory = connFactory; } result.Resolve(new MappedConnection(servers)); } } catch (XmlException) { result.Resolve(ArasConn(arasSerice, url, preferences)); } } }).Fail(ex => { result.Resolve(ArasConn(arasSerice, url, preferences)); })); return result; }
public bool Equals(ProxyServerConnection conn) { return conn._endpoints.Base.Equals(this._endpoints.Base) && String.Equals(conn._database, this._database) && String.Equals(conn._userId, this._userId); }