12
|
1
|
7
|
2 module chatserver;
|
|
3
|
12
|
4 import dreactor.core.Vat;
|
|
5 import dreactor.core.Task;
|
|
6 import dreactor.protocol.TcpProvider;
|
7
|
7
|
12
|
8
|
|
9 class ChatConnectionTask : Task
|
|
10 {
|
|
11 public
|
7
|
12
|
12
|
13 void run()
|
|
14 {
|
|
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 }
|
10
|
34
|
12
|
35 void send(char[] buf)
|
|
36 {
|
|
37 tcp.send(buf);
|
|
38 }
|
7
|
39
|
12
|
40 static CircularList!(ChatConnectionTask!(
|
7
|
41 }
|
|
42
|
12
|
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 }
|