public void GetResponse(Action<Exception, WebSocketResponse> callback) { //------------------------------------------ // create method //------------------------------------------ string http = string.Format("{0} {1} HTTP/1.1", this.Method.ToUpper(), this.Uri.PathAndQuery); //------------------------------------------ // create header //------------------------------------------ this.Headers["Cache-Control"] = "no-cache"; this.Headers["Connection"] = "upgrade"; this.Headers["Host"] = this.Uri.Authority; this.Headers["Pragma"] = "no-cache"; this.Headers["Sec-WebSocket-Extensions"] = "permessage-deflate"; this.Headers["Sec-WebSocket-Key"] = this.CreateSecWebSocketKey(); this.Headers["Sec-WebSocket-Version"] = "13"; this.Headers["Upgrade"] = "websocket"; this.Headers["User-Agent"] = "Reactor.Web.Sockets.WebSocket"; //------------------------------------------ // build request //------------------------------------------ var buffer = Reactor.Buffer.Create(); buffer.Write(http + "\r\n"); foreach (var pair in this.Headers) { buffer.Write("{0}: {1}\r\n", pair.Key, pair.Value); } buffer.Write("\r\n"); //------------------------------------------ // resolve port //------------------------------------------ var port = this.Uri.Port; if (port == -1) { switch(this.Uri.Scheme) { case "ws" : port = 80; break; case "wss": port = 443; break; default: break; } } //------------------------------------------ // send request //------------------------------------------ this.socket = Reactor.Tcp.Socket.Create(this.Uri.DnsSafeHost, port); this.socket.OnConnect += () => { this.socket.Write(buffer, (exception) => { if (exception != null) { callback(exception, null); return; } Reactor.Action<Buffer> ondata = null; ondata = (data) => { this.socket.OnData -= ondata; var response = new Reactor.Web.Socket.WebSocketResponse(this.socket, data); callback(null, response); }; this.socket.OnData += ondata; }); }; this.socket.OnError += (exception) => { callback(exception, null); }; }
public void GetResponse(Action <Exception, WebSocketResponse> callback) { //------------------------------------------ // create method //------------------------------------------ string http = string.Format("{0} {1} HTTP/1.1", this.Method.ToUpper(), this.Uri.PathAndQuery); //------------------------------------------ // create header //------------------------------------------ this.Headers["Cache-Control"] = "no-cache"; this.Headers["Connection"] = "upgrade"; this.Headers["Host"] = this.Uri.Authority; this.Headers["Pragma"] = "no-cache"; this.Headers["Sec-WebSocket-Extensions"] = "permessage-deflate"; this.Headers["Sec-WebSocket-Key"] = this.CreateSecWebSocketKey(); this.Headers["Sec-WebSocket-Version"] = "13"; this.Headers["Upgrade"] = "websocket"; this.Headers["User-Agent"] = "Reactor.Web.Sockets.WebSocket"; //------------------------------------------ // build request //------------------------------------------ var buffer = Reactor.Buffer.Create(); buffer.Write(http + "\r\n"); foreach (var pair in this.Headers) { buffer.Write("{0}: {1}\r\n", pair.Key, pair.Value); } buffer.Write("\r\n"); //------------------------------------------ // resolve port //------------------------------------------ var port = this.Uri.Port; if (port == -1) { switch (this.Uri.Scheme) { case "ws": port = 80; break; case "wss": port = 443; break; default: break; } } //------------------------------------------ // send request //------------------------------------------ this.socket = Reactor.Tcp.Socket.Create(this.Uri.DnsSafeHost, port); this.socket.OnConnect += () => { this.socket.Write(buffer, (exception) => { if (exception != null) { callback(exception, null); return; } Reactor.Action <Buffer> ondata = null; ondata = (data) => { this.socket.OnData -= ondata; var response = new Reactor.Web.Socket.WebSocketResponse(this.socket, data); callback(null, response); }; this.socket.OnData += ondata; }); }; this.socket.OnError += (exception) => { callback(exception, null); }; }