constructor(user, chosenServer) {
		super(user);

		this.connectionType = 'TCP';
		this.sessionKey = null;

		this._debug('Connecting to TCP CM: ' + chosenServer.endpoint);
		let cmParts = chosenServer.endpoint.split(':');
		let cmHost = cmParts[0];
		let cmPort = parseInt(cmParts[1], 10);

		if (user.options.httpProxy) {
			let url = new URL(user.options.httpProxy);
			let prox = {
				protocol: url.protocol,
				host: url.hostname,
				port: url.port,

				method: 'CONNECT',
				path: chosenServer.endpoint,
				localAddress: user.options.localAddress,
				localPort: user.options.localPort
			};
			if (url.username) {
				prox.headers = {
					'Proxy-Authorization': `Basic ${(Buffer.from(`${url.username}:${url.password || ''}`, 'utf8')).toString('base64')}`
				};
			}

			let connectionEstablished = false;
			let req = HTTP.request(prox);
			req.end();
			req.setTimeout(user.options.proxyTimeout || 5000);
			req.on('connect', (res, socket) => {
				if (connectionEstablished) {
					// somehow we're already connected, or we aborted
					socket.end();
					return;
				}

				connectionEstablished = true;
				req.setTimeout(0); // disable timeout

				if (res.statusCode != 200) {
					this._fatal(new Error(`Proxy HTTP CONNECT ${res.statusCode} ${res.statusMessage}`));
					return;
				}

				this.stream = socket;
				this._setupStream();
			});

			req.on('timeout', () => {
				connectionEstablished = true;
				this.user._cleanupClosedConnection();
				this._fatal(new Error('Proxy connection timed out'));
			});

			req.on('error', (err) => {
				connectionEstablished = true;
				this.user._cleanupClosedConnection();
				this._fatal(err);
			});
		} else {
			let socket = new Socket();
			this.stream = socket;
			this._setupStream();

			socket.connect({
				port: cmPort,
				host: cmHost,
				localAddress: user.options.localAddress,
				localPort: user.options.localPort
			});

			this.stream.setTimeout(this.user._connectTimeout);
		}
	}
Create a new TCP connection, and connect
@param {SteamUser} user
@param {CmServer} chosenServer
@constructor