Mercurial > projects > dreactor
comparison dreactor/protocol/RawTcp.d @ 6:287ba7de97c4
more housekeeping
author | rick@minifunk |
---|---|
date | Tue, 08 Jul 2008 12:23:26 -0400 |
parents | f875a1f278b8 |
children | 60cf25102fb2 |
comparison
equal
deleted
inserted
replaced
5:f875a1f278b8 | 6:287ba7de97c4 |
---|---|
7 import tango.util.log.Log; | 7 import tango.util.log.Log; |
8 import tango.util.log.Config; | 8 import tango.util.log.Config; |
9 | 9 |
10 import dreactor.transport.AsyncSocketConduit; | 10 import dreactor.transport.AsyncSocketConduit; |
11 import dreactor.core.Vat; | 11 import dreactor.core.Vat; |
12 import dreactor.core.ConnectionHandler; | 12 import dreactor.core.Dispatcher; |
13 | 13 |
14 /****************************************************************************** | 14 /****************************************************************************** |
15 | 15 |
16 Basic TCP server or client routines for sending raw data. | 16 Basic TCP server or client routines for sending raw data. |
17 | 17 |
18 ******************************************************************************/ | 18 ******************************************************************************/ |
19 class RawTCPListener | 19 class RawTCPListener |
20 { | 20 { |
21 public | 21 public |
22 Logger log; | 22 Logger log; |
23 this(ConnectionHandler mgr, Vat sel, IPv4Address addr) | 23 this(Dispatcher mgr, Vat sel, IPv4Address addr) |
24 { | 24 { |
25 manager = mgr; | 25 manager = mgr; |
26 mgr.events(Event.Read); | 26 mgr.events(Event.Read); |
27 mgr.setOutgoingHandler(&Handlers.onSend); | 27 mgr.setOutgoingHandler(&Handlers.onSend); |
28 mgr.setIncomingHandler(&Handlers.onReceive); | 28 mgr.setIncomingHandler(&Handlers.onReceive); |
31 | 31 |
32 sel.addConnection(mgr); | 32 sel.addConnection(mgr); |
33 vat = sel; | 33 vat = sel; |
34 log = Log.lookup("dreactor.protocol.RawTcpServer"); | 34 log = Log.lookup("dreactor.protocol.RawTcpServer"); |
35 log.info("log initialized"); | 35 log.info("log initialized"); |
36 children = new CircularSeq!(ConnectionHandler); | 36 children = new CircularSeq!(Dispatcher); |
37 } | 37 } |
38 | 38 |
39 int accept(Conduit cond, RegisterD reg) | 39 int accept(Conduit cond, RegisterD reg) |
40 { | 40 { |
41 AsyncSocketConduit newcond = new AsyncSocketConduit; | 41 AsyncSocketConduit newcond = new AsyncSocketConduit; |
42 (cast(AsyncSocketConduit)cond).socket().accept(newcond.socket); | 42 (cast(AsyncSocketConduit)cond).socket().accept(newcond.socket); |
43 ConnectionHandler h = ConnectionHandler.New(newcond, manager); | 43 Dispatcher h = Dispatcher.New(newcond, manager); |
44 h.events(Event.Read); | 44 h.events(Event.Read); |
45 vat.addConnection(h); | 45 vat.addConnection(h); |
46 children.append(h); | 46 children.append(h); |
47 log.info("accepted new connection"); | 47 log.info("accepted new connection"); |
48 return 0; | 48 return 0; |
49 } | 49 } |
50 | 50 |
51 int broadcast(char[] outbuf) | 51 int broadcast(char[] outbuf) |
52 { | 52 { |
53 foreach(ConnectionHandler h; children) | 53 foreach(Dispatcher h; children) |
54 { | 54 { |
55 if (h.appendOutBuffer(outbuf)) | 55 if (h.appendOutBuffer(outbuf)) |
56 { | 56 { |
57 h.addEvent(Event.Write); | 57 h.addEvent(Event.Write); |
58 vat.addConnection(h); | 58 vat.addConnection(h); |
65 { | 65 { |
66 | 66 |
67 } | 67 } |
68 | 68 |
69 private | 69 private |
70 ConnectionHandler manager; | 70 Dispatcher manager; |
71 Vat vat; | 71 Vat vat; |
72 CircularSeq!(ConnectionHandler) children; | 72 CircularSeq!(Dispatcher) children; |
73 } | 73 } |
74 | 74 |
75 class RawTCPClient | 75 class RawTCPClient |
76 { | 76 { |
77 public | 77 public |
78 Logger log; | 78 Logger log; |
79 this(ConnectionHandler mgr, Vat sel, Event evts = Event.Read) | 79 this(Dispatcher mgr, Vat sel, Event evts = Event.Read) |
80 { | 80 { |
81 manager = mgr; | 81 manager = mgr; |
82 manager.events(evts); | 82 manager.events(evts); |
83 connected = false; | 83 connected = false; |
84 mgr.setOutgoingHandler(&Handlers.onSend); | 84 mgr.setOutgoingHandler(&Handlers.onSend); |
128 } | 128 } |
129 return 0; | 129 return 0; |
130 } | 130 } |
131 | 131 |
132 private | 132 private |
133 ConnectionHandler manager; | 133 Dispatcher manager; |
134 Vat vat; | 134 Vat vat; |
135 bool connected; | 135 bool connected; |
136 } | 136 } |
137 | 137 |
138 | 138 |
150 To be registered as the response to socket writable event. | 150 To be registered as the response to socket writable event. |
151 Sends data, returns amount sent. Unregisters Handler for sending | 151 Sends data, returns amount sent. Unregisters Handler for sending |
152 if there is no more data left to send. | 152 if there is no more data left to send. |
153 | 153 |
154 ***************************************************************************/ | 154 ***************************************************************************/ |
155 public static int onSend(ConnectionHandler h) | 155 public static int onSend(Dispatcher h) |
156 { | 156 { |
157 Logger log = Log.lookup("Handlers.onSend"); | 157 Logger log = Log.lookup("Handlers.onSend"); |
158 | 158 |
159 log.info("top of onSend"); | 159 log.info("top of onSend"); |
160 char[] outbuf = h.nextBuffer(); | 160 char[] outbuf = h.nextBuffer(); |
190 receive | 190 receive |
191 IncomingHandlerD | 191 IncomingHandlerD |
192 Default incoming data handler. Should be replaced with something useful. | 192 Default incoming data handler. Should be replaced with something useful. |
193 | 193 |
194 **************************************************************************/ | 194 **************************************************************************/ |
195 public static int onReceive(ConnectionHandler h) | 195 public static int onReceive(Dispatcher h) |
196 { | 196 { |
197 Logger log = Log.lookup("Handlers.onReceive"); | 197 Logger log = Log.lookup("Handlers.onReceive"); |
198 | 198 |
199 char inbuf[8192]; | 199 char inbuf[8192]; |
200 int amt; | 200 int amt; |