annotate test/chatserver.d @ 13:8c9b1276f623 default tip

bug fixes
author rick@minifunk
date Sat, 20 Sep 2008 18:33:11 -0400
parents d6a3cfe7c3de
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
1
7
2c6ab06a8829 fixed up for chatserver
rick@minifunk
parents:
diff changeset
2 module chatserver;
2c6ab06a8829 fixed up for chatserver
rick@minifunk
parents:
diff changeset
3
13
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
4 import tango.io.Stdout;
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
5 import tango.io.Console;
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
6 import tango.util.container.CircularList;
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
7 import tango.util.log.Log;
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
8 import tango.net.Socket;
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
9
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
10 import dreactor.core.Vat;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
11 import dreactor.core.Task;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
12 import dreactor.protocol.TcpProvider;
13
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
13 import dreactor.transport.AsyncSocketConduit;
7
2c6ab06a8829 fixed up for chatserver
rick@minifunk
parents:
diff changeset
14
13
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
15 typedef Message ChildTCPRequest;
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
16 Logger log;
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
17
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
18 class ChatConnectionTask : Task
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
19 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
20 public
13
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
21 this(TcpProvider tcpclient)
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
22 {
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
23 super(tcpclient);
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
24 }
7
2c6ab06a8829 fixed up for chatserver
rick@minifunk
parents:
diff changeset
25
13
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
26 enum {
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
27 StdIn = 100,
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
28 RemoteClosed
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
29 }
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
30
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
31 void run()
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
32 {
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
33 running = true;
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
34 Message msg;
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
35 while (running)
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
36 {
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
37 msg = receive();
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
38 switch(msg.type)
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
39 {
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
40 case TcpProvider.Receive:
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
41 Stdout(cast(char*) msg.payload);
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
42 break;
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
43 case TcpProvider.SendComplete:
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
44 break;
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
45 case TcpProvider.RemoteClosed:
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
46 log.trace("--- Remote host closed connection \n");
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
47 break;
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
48 default:
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
49 log.trace("Unknown message received\n");
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
50 }
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
51 }
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
52 }
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
53
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
54 private
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
55 bool running;
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
56 }
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
57
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
58 class ListenerTask : Task
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
59 {
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
60 this(TcpProvider tcpclient)
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
61 {
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
62 super(tcpclient);
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
63 }
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
64 void run()
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
65 {
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
66 Message msg;
13
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
67 running = true;
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
68 while (running)
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
69 {
13
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
70 msg = receive();
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
71 auto children = new CircularList!(ChatConnectionTask);
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
72 switch(msg.type)
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
73 {
13
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
74 case TcpProvider.NewConnection:
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
75 AsyncSocketConduit cond = cast(AsyncSocketConduit) msg.payload;
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
76 log.trace("new conduit : {}", cast(uint) cond);
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
77 auto provider = new TcpProvider(cond);
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
78 auto tsk = new ChatConnectionTask(new TcpProvider(cond));
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
79 children.append(tsk);
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
80 log.trace("accepted connection");
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
81 break;
13
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
82 case ChatConnectionTask.StdIn:
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
83 char[] inbuf = (cast(char*) msg.payload)[0 .. msg.info];
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
84 break;
13
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
85 case ChatConnectionTask.RemoteClosed:
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
86 break;
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
87 default:
13
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
88 log.trace("Unknown message received");
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
89 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
90 }
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
91 }
13
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
92 private
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
93 bool running;
7
2c6ab06a8829 fixed up for chatserver
rick@minifunk
parents:
diff changeset
94 }
2c6ab06a8829 fixed up for chatserver
rick@minifunk
parents:
diff changeset
95
13
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
96 int main(char[][] args)
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
97 {
13
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
98 log = Log.lookup("dreactor.chatserver");
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
99 auto provider = new TcpProvider(new IPv4Address("localhost", 5555), true);
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
100 auto srvtsk = new ListenerTask(provider);
8c9b1276f623 bug fixes
rick@minifunk
parents: 12
diff changeset
101 return 0;
12
d6a3cfe7c3de more stuff
rick@Macintosh.local
parents: 10
diff changeset
102 }