Mercurial > projects > dreactor
comparison test/chatserver.d @ 12:d6a3cfe7c3de
more stuff
author | rick@Macintosh.local |
---|---|
date | Wed, 27 Aug 2008 00:47:33 -0400 |
parents | e75a2e506b1d |
children | 8c9b1276f623 |
comparison
equal
deleted
inserted
replaced
11:5836613d16ac | 12:d6a3cfe7c3de |
---|---|
1 | |
1 module chatserver; | 2 module chatserver; |
2 | 3 |
3 import tango.net.Socket; | 4 import dreactor.core.Vat; |
4 import tango.core.Thread; | 5 import dreactor.core.Task; |
5 import tango.io.Stdout; | 6 import dreactor.protocol.TcpProvider; |
6 import tango.util.log.Log; | |
7 import dreactor.core.Vat; | |
8 import dreactor.core.Dispatcher; | |
9 | 7 |
10 import dreactor.protocol.RawTcp; | |
11 import dreactor.transport.AsyncSocketConduit; | |
12 | 8 |
13 int main() | 9 class ChatConnectionTask : Task |
14 { | 10 { |
15 Vat l_vat = new Vat(); | 11 public |
16 Logger log = Log.lookup("dreactor.chatserver"); | |
17 Log.root.level(log.Level.Info, true); | |
18 RawTCPListener listener = new RawTCPListener(l_vat, new IPv4Address(5555)); | |
19 | 12 |
20 listener.setDataHandler( (char[] inbuf, Dispatcher d) { | 13 void run() |
21 | 14 { |
22 listener.broadcast(inbuf, [d]); | 15 Message msg; |
16 while (msg = receive()) | |
17 { | |
18 switch(msg.type) | |
19 { | |
20 case TCP_PROVIDER_RECEIVE: | |
21 //Stdout(cast(char[]) msg.payload); | |
22 break; | |
23 case TCP_PROVIDER_SEND_COMPLETE: | |
24 break; | |
25 case TCP_PROVIDER_REMOTE_CLOSED: | |
26 Stdout("--- Remote host closed connection \n"); | |
27 break; | |
28 default: | |
29 Stdout("Unknown message received\n"); | |
30 } | |
31 } | |
32 em.stopNow(); | |
33 } | |
23 | 34 |
24 }); | 35 void send(char[] buf) |
25 l_vat.run(); | 36 { |
37 tcp.send(buf); | |
38 } | |
26 | 39 |
27 return 0; | 40 static CircularList!(ChatConnectionTask!( |
28 } | 41 } |
29 | 42 |
43 | |
44 int main(int argc, char[][] argv) | |
45 { | |
46 auto vat = new Vat; | |
47 | |
48 void listentask(Message msg) | |
49 { | |
50 switch(msg.type) | |
51 { | |
52 case TCP_PROVIDER_CONNECT: | |
53 AsyncSocketConduit cond = cast(AsyncSocketConduit) msg.payload; | |
54 auto tsk = ChatConnectionTask(new TcpProvider(cond)); | |
55 vat.addTask(tsk); | |
56 break; | |
57 default: | |
58 Stdout("Unknown message received\n"); | |
59 } | |
60 } | |
61 | |
62 | |
63 auto provider = new TcpProvider(new IPv4Address("localhost", 5555), vat); | |
64 auto srvtsk = new Task(&listentask, provider); | |
65 vat.addTask(task, client); | |
66 } |