Mercurial > projects > dreactor
diff dreactor/protocol/RawTcp.d @ 11:5836613d16ac
reorg! reorg!
author | rick@minifunk |
---|---|
date | Tue, 12 Aug 2008 16:59:56 -0400 |
parents | e75a2e506b1d |
children |
line wrap: on
line diff
--- a/dreactor/protocol/RawTcp.d Fri Aug 01 16:30:45 2008 -0400 +++ b/dreactor/protocol/RawTcp.d Tue Aug 12 16:59:56 2008 -0400 @@ -19,29 +19,19 @@ class RawTCPListener { public - this(Dispatcher mgr, Vat sel, IPv4Address addr) + + this(AsyncSocketConduit cond) { - manager = mgr; - mgr.events(Event.Read); - mgr.setOutgoingHandler(&RawTCPHandler.onSend); - mgr.setIncomingHandler(&onReceive); - mgr.setConnectHandler(&accept); - mgr.setErrorHandler(&RawTCPHandler.onError); - mgr.setDisconnectHandler(&RawTCPHandler.onHangup); - mgr.listen(addr); - - sel.addConnection(mgr); - vat = sel; log = Log.lookup("dreactor.protocol.RawTcpServer"); log.info("log initialized"); children = new CircularSeq!(Dispatcher); } + this(Vat sel, IPv4Address addr) { AsyncSocketConduit cond = new AsyncSocketConduit; cond.socket().setAddressReuse(true); - Dispatcher lh = new Dispatcher(cond, true); - this(lh, sel, addr); + this(cond); } ~this() @@ -49,25 +39,22 @@ close(); } - int accept(Conduit cond, RegisterD reg) + AsyncSocketConduit accept(Conduit cond, RegisterD reg) { AsyncSocketConduit newcond = new AsyncSocketConduit; (cast(AsyncSocketConduit)cond).socket().accept(newcond.socket); - Dispatcher h = Dispatcher.New(newcond, manager); h.events(Event.Read); vat.addConnection(h); children.append(h); log.info("accepted new connection"); - return 0; + return newcond; } - int broadcast(char[] outbuf, Dispatcher[] excluded = null) + int broadcast(char[] outbuf, AsyncSocketConduit[] recips) { - foreach(Dispatcher h; children) + foreach(AsyncSocketConduit c; recips) { - if (excluded && excluded.includes(h)) - continue; - if (h.appendOutBuffer(outbuf)) + if (c.appendOutBuffer(outbuf)) { h.addEvent(Event.Write); vat.addConnection(h); @@ -263,6 +250,7 @@ { dataHandler = h; } + private void delegate(char[], Dispatcher) dataHandler; Dispatcher manager;