public void Handle(IChannel channel, Request request) { var contact = new HttpContact(channel, request, new Response {Protocol = request.GetProtocol()}); if(contact.GetRequest().GetProtocol() == "HTTP/1.1") contact.GetResponse().Protocol = "1.1"; try { _action(contact, _rx.Split(request.GetPath())); } catch (Exception e) { contact.GetResponse().Status = 500; contact.GetResponse().SetContent(e.ToString()); } if (contact.IsAutoSendResponse) channel.SendMessage(contact.GetResponse()); }
public void Handle(IChannel channel, Request request) { var response = new Response(); response.Protocol = request.GetProtocol(); FileStream reader = null; try { reader = new FileStream(string.Format(_path, _rx.Split(request.GetPath())), FileMode.Open, FileAccess.Read); int index = request.GetPath().LastIndexOf("."); if(index != -1 && index+1 < request.GetPath().Length) { try { string extension = request.GetPath().Substring(index+1); response.ContentType = ContentTypeDictionary[extension]; } catch (Exception) { } } if(response.ContentType.StartsWith("text/")) response.SetContent(new StreamReader(reader).ReadToEnd()); else response.SetContent(reader); } catch (Exception) { response.Status = 404; } if (reader != null) reader.Close(); channel.SendMessage(response); }
private void Processing(IChannel channel, Request request) { //웹소켓 요청인가? if (request.GetHeader("connection") == "Upgrade") { if (request.GetHeader("upgrade") == "websocket") UpgradeWebSocket(channel, request); return; } //JSON if (request.GetHeader("Accept") != null && request.GetHeader("Accept").IndexOf("application/json") >= 0) { UriFinder finder = GetJSONUriFinder(request); if (finder != null) { var response = new Response(); response.SetContent(finder.GetHandler(request.GetPath()).ToString()); response.ContentType = "application/json"; response.Protocol = request.GetProtocol(); channel.SendMessage(response); return; } } //여기서 여러가지 예외 처리를! IUriHandler handler = GetUriHandler(channel, request); if (handler != null) { handler.Handle(channel, request); } else { var response = new Response(); response.Status = 401; response.Protocol = request.GetProtocol(); channel.SendMessage(response); } }