public Packet deserialize(System.IO.BinaryReader br) { customPacket ret = new customPacket(); BinaryReader sr = new BinaryReader(br.BaseStream); String getdata = sr.ReadString(); String fHeader = getdata.Split('\n')[0]; ((customHeader)ret.getHeader()).method = fHeader.Split(' ')[0]; ((customHeader)ret.getHeader()).path = fHeader.Split(' ')[1]; ((customHeader)ret.getHeader()).ver = fHeader.Split(' ')[2]; foreach (var t in from str in getdata.Split('\n').Reverse().Skip(1).Reverse().Skip(1) select new { Key = str.Split(':')[0], Val = str.Split(':')[1] }) { ((customHeader)ret.getHeader()).headers[t.Key.Trim()] = t.Val.Trim(); } ret.str = getdata.Split('\n').Last(); return(ret); }
private void Form1_Load(object sender, EventArgs e) { new Thread(new ThreadStart( delegate { while (true) { setLabel(); Thread.Sleep(1000); } } )).Start(); connector.frm = this; PacketPolicy policy = new PacketPolicy(); customFilter gf = new customFilter(policy); AsyncServer server = new AsyncServer(8888, new PacketConv(), gf); server.setExceptionHandler(new ExceptionHandler((c, ex) => { if (ex is HTTPException) { HTTPException he = ex as HTTPException; String msg = ""; switch (he.code) { case 404: msg = "HTTP/1.1 404 Not Found\r\nConnection: Close\r\nContent-Length: 8\r\nContent-Type:text/html; charset=UTF-8\r\n\r\n404Error"; break; } customPacket cp = new customPacket(); cp.str = msg; c.Send(cp); c.Close(); } })); server.addFilter(new Filter((hd) => { bool ret = File.Exists((hd as customHeader).path.Substring(1)); if (!ret) { throw new HTTPException(404); } return(ret); }, (ct) => { customPacket c = ct.packet as customPacket; String d = File.ReadAllText(((customHeader)c.getHeader()).path.Substring(1)); String value = "<h6>current directory is " + ((customHeader)c.getHeader()).path + "</h6><br>" + d; int contentLength = value.Length; String data = String.Format("HTTP/1.1 200 OK\r\ncontent-length: {0}\r\nContent-Type:text/html; charset=UTF-8\r\n\r\n" + value, contentLength); customPacket send = new customPacket(); Thread.Sleep(1000); send.str = data; ct.Send(send); ct.Close(); return(true); })); // server.Map(c => { c.socket.Send(new byte[3]); }, uid => uid != 1); server.run(); // continous packet test AsyncServer conServer = new AsyncServer(8000, new conPacketConv(), gf); conServer.addFilter(new Filter(Header => { return(true); } , context => { Debug.WriteLine("CONTINOUS RECV PACKET - " + ((conPacket)context.packet).str); return(true); } )); conServer.run(); }