/// <summary> /// Are about to send a new message /// </summary> /// <param name="message">Message to send</param> /// <remarks> /// Can be used to prepare the next message. for instance serialize it etc. /// </remarks> /// <exception cref="NotSupportedException">Message is of a type that the encoder cannot handle.</exception> public void Prepare(object message) { if (message is IWebSocketMessage) { _message = (IWebSocketMessage)message; _message.Payload.Position = 0; _totalAmountToSend = (int)_message.Payload.Length; } else { try { _httpMessageEncoder.Prepare(message); var httpMessage = message as IHttpMessage; if (WebSocketUtils.IsWebSocketUpgrade(httpMessage)) { _handshake = httpMessage; } } catch (Exception e) { throw new InvalidOperationException("This encoder only supports messages deriving from 'HttpMessage' or 'WebSocketMessage'", e); } } }
public void basic_response() { var frame = new HttpResponse(404, "Failed to find it dude", "HTTP/1.1"); var expected = "HTTP/1.1 404 Failed to find it dude\r\n"; var buffer = new SocketBufferFake(); var encoder = new HttpMessageEncoder(); encoder.Prepare(frame); encoder.Send(buffer); var actual = Encoding.ASCII.GetString(buffer.Buffer, 0, buffer.Count); actual.Substring(0, expected.Length).Should().Be(expected); }
public void request_in_its_simplest_form() { var frame = new HttpRequest("POST", "/", "HTTP/1.1"); var expected = "POST / HTTP/1.1\r\nContent-Length: 0\r\n\r\n"; var buffer = new SocketBufferFake(); var encoder = new HttpMessageEncoder(); encoder.Prepare(frame); encoder.Send(buffer); var actual = Encoding.ASCII.GetString(buffer.Buffer, 0, buffer.Count); actual.Should().Be(expected); }
public void response_with_body() { var frame = new HttpResponse(HttpStatusCode.NotFound, "Failed to find it dude", "HTTP/1.1"); frame.AddHeader("X-Requested-With", "XHttpRequest"); frame.ContentType = "text/plain"; frame.Body = new MemoryStream(Encoding.ASCII.GetBytes("hello queue a")); var expected = string.Format("HTTP/1.1 404 Failed to find it dude\r\nServer: griffinframework.net\r\nDate: {0}\r\nContent-Type: text/plain\r\nX-Requested-With: XHttpRequest\r\nContent-Length: 13\r\n\r\nhello queue a", DateTime.UtcNow.ToString("R")); var buffer = new SocketBufferFake(); var encoder = new HttpMessageEncoder(); encoder.Prepare(frame); encoder.Send(buffer); var actual = Encoding.ASCII.GetString(buffer.Buffer, 0, buffer.Count); actual.Should().Be(expected); }
public void request_with_body() { var frame = new HttpRequest("POST", "/?abc", "HTTP/1.1"); frame.AddHeader("server", "Griffin.Networking"); frame.AddHeader("X-Requested-With", "XHttpRequest"); frame.ContentType = "text/plain"; frame.Body = new MemoryStream(Encoding.ASCII.GetBytes("hello queue a")); var expected = "POST /?abc HTTP/1.1\r\nserver: Griffin.Networking\r\nX-Requested-With: XHttpRequest\r\nContent-Type: text/plain\r\nContent-Length: 13\r\n\r\nhello queue a"; var buffer = new SocketBufferFake(); var encoder = new HttpMessageEncoder(); encoder.Prepare(frame); encoder.Send(buffer); var actual = Encoding.ASCII.GetString(buffer.Buffer, 0, buffer.Count); actual.Should().Be(expected); }