comparison dreactor/protocol/RawTcp.d @ 5:f875a1f278b8

housekeeping
author rick@minifunk
date Tue, 08 Jul 2008 12:16:07 -0400
parents f8b01c9f7114
children 287ba7de97c4
comparison
equal deleted inserted replaced
4:f8b01c9f7114 5:f875a1f278b8
6 import tango.util.collection.CircularSeq; 6 import tango.util.collection.CircularSeq;
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.SelectLoop; 11 import dreactor.core.Vat;
12 import dreactor.core.ConnectionHandler; 12 import dreactor.core.ConnectionHandler;
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.
18 ******************************************************************************/ 18 ******************************************************************************/
19 class RawTCPListener 19 class RawTCPListener
20 { 20 {
21 public 21 public
22 Logger log; 22 Logger log;
23 this(ConnectionHandler mgr, SelectLoop sel, IPv4Address addr) 23 this(ConnectionHandler 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);
29 mgr.setConnectHandler(&accept); 29 mgr.setConnectHandler(&accept);
30 mgr.listen(addr); 30 mgr.listen(addr);
31 31
32 sel.addConnection(mgr); 32 sel.addConnection(mgr);
33 select = 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!(ConnectionHandler);
37 } 37 }
38 38
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 ConnectionHandler h = ConnectionHandler.New(newcond, manager);
44 h.events(Event.Read); 44 h.events(Event.Read);
45 select.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
53 foreach(ConnectionHandler h; children) 53 foreach(ConnectionHandler 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 select.addConnection(h); 58 vat.addConnection(h);
59 } 59 }
60 } 60 }
61 return 0; 61 return 0;
62 } 62 }
63 63
66 66
67 } 67 }
68 68
69 private 69 private
70 ConnectionHandler manager; 70 ConnectionHandler manager;
71 SelectLoop select; 71 Vat vat;
72 CircularSeq!(ConnectionHandler) children; 72 CircularSeq!(ConnectionHandler) 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, SelectLoop sel, Event evts = Event.Read) 79 this(ConnectionHandler 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);
85 mgr.setIncomingHandler(&Handlers.onReceive); 85 mgr.setIncomingHandler(&Handlers.onReceive);
86 select = sel; 86 vat = sel;
87 log = Log.lookup("dreactor.protocol.RawTcpClient"); 87 log = Log.lookup("dreactor.protocol.RawTcpClient");
88 } 88 }
89 89
90 int connect(IPv4Address addr) 90 int connect(IPv4Address addr)
91 { 91 {
92 (cast(AsyncSocketConduit) manager.transport()).connect(addr); 92 (cast(AsyncSocketConduit) manager.transport()).connect(addr);
93 select.addConnection(manager); 93 vat.addConnection(manager);
94 connected = true; 94 connected = true;
95 log.info("connected to {}", addr); 95 log.info("connected to {}", addr);
96 return 0; 96 return 0;
97 } 97 }
98 98
104 data as the socket becomes free. 104 data as the socket becomes free.
105 105
106 **************************************************************************/ 106 **************************************************************************/
107 int send(char[] outbuf, IPv4Address addr = null) 107 int send(char[] outbuf, IPv4Address addr = null)
108 { 108 {
109 log.info("sending buffer: {}", outbuf);
110 if (!connected) 109 if (!connected)
111 { 110 {
112 log.info("not connected, connecting"); 111 log.info("send: not connected, connecting");
113 if (addr !is null) 112 if (addr !is null)
114 { 113 {
115 if (0 > connect(addr)) 114 if (0 > connect(addr))
116 { 115 {
117 log.error("unable to connect"); 116 log.error("send: unable to connect");
118 return -1; 117 return -1;
119 } 118 }
120 } 119 }
121 } 120 }
122 if (manager.appendOutBuffer(outbuf)) 121 if (manager.appendOutBuffer(outbuf))
123 { 122 {
124 manager.addEvent(Event.Write); 123 manager.addEvent(Event.Write);
125 if (!select.addConnection(manager)) 124 if (!vat.addConnection(manager))
126 { 125 {
127 log.error("unable to register mgr"); 126 log.error("unable to register mgr");
128 } 127 }
129 } 128 }
130 return 0; 129 return 0;
131 } 130 }
132 131
133 private 132 private
134 ConnectionHandler manager; 133 ConnectionHandler manager;
135 SelectLoop select; 134 Vat vat;
136 bool connected; 135 bool connected;
137 } 136 }
138 137
139 138
140 /****************************************************************************** 139 /******************************************************************************
198 Logger log = Log.lookup("Handlers.onReceive"); 197 Logger log = Log.lookup("Handlers.onReceive");
199 198
200 char inbuf[8192]; 199 char inbuf[8192];
201 int amt; 200 int amt;
202 if((amt = h.transport.read(inbuf)) > 0) 201 if((amt = h.transport.read(inbuf)) > 0)
203 log.info("Received Buffer: {}", inbuf[0 .. amt]); 202 log.info("Received {} byte Buffer: {}", amt, inbuf[0 .. amt]);
204 else 203 else
205 log.error("Received no data, err = {}", amt); 204 log.error("Received no data, err = {}", amt);
206 205
207 return REMAIN; 206 return REMAIN;
208 } 207 }