@@ -2,11 +2,10 @@ import task;
2
2
import vec;
3
3
4
4
import comm;
5
- import comm:: _chan;
6
- import comm:: _port;
7
- import comm:: mk_port;
5
+ import comm:: chan;
6
+ import comm:: port;
8
7
import comm:: send;
9
-
8
+ import comm :: recv ;
10
9
import net;
11
10
12
11
native "rust" mod rustrt {
@@ -15,11 +14,11 @@ native "rust" mod rustrt {
15
14
fn aio_init ( ) ;
16
15
fn aio_run ( ) ;
17
16
fn aio_stop ( ) ;
18
- fn aio_connect ( host : * u8 , port : int , connected : & _chan < socket > ) ;
19
- fn aio_serve ( host : * u8 , port : int , acceptChan : & _chan < socket > ) -> server ;
20
- fn aio_writedata ( s : socket , buf : * u8 , size : uint , status : & _chan < bool > ) ;
21
- fn aio_read ( s : socket , reader : & _chan < [ u8 ] > ) ;
22
- fn aio_close_server ( s : server , status : & _chan < bool > ) ;
17
+ fn aio_connect ( host : * u8 , port : int , connected : & chan < socket > ) ;
18
+ fn aio_serve ( host : * u8 , port : int , acceptChan : & chan < socket > ) -> server ;
19
+ fn aio_writedata ( s : socket , buf : * u8 , size : uint , status : & chan < bool > ) ;
20
+ fn aio_read ( s : socket , reader : & chan < [ u8 ] > ) ;
21
+ fn aio_close_server ( s : server , status : & chan < bool > ) ;
23
22
fn aio_close_socket ( s : socket ) ;
24
23
fn aio_is_null_client ( s : socket ) -> bool ;
25
24
}
@@ -32,42 +31,42 @@ tag pending_connection { remote(net::ip_addr, int); incoming(server); }
32
31
33
32
tag socket_event { connected( client) ; closed; received ( [ u8] ) ; }
34
33
35
- tag server_event { pending( _chan<_chan <socket_event>>) ; }
34
+ tag server_event { pending( chan<chan <socket_event>>) ; }
36
35
37
36
tag request {
38
37
quit;
39
- connect ( pending_connection, _chan <socket_event>) ;
40
- serve ( net:: ip_addr, int, _chan <server_event>, _chan <server>) ;
41
- write ( client, [ u8] , _chan <bool>) ;
42
- close_server ( server, _chan <bool>) ;
38
+ connect ( pending_connection, chan <socket_event>) ;
39
+ serve ( net:: ip_addr, int, chan <server_event>, chan <server>) ;
40
+ write ( client, [ u8] , chan <bool>) ;
41
+ close_server ( server, chan <bool>) ;
43
42
close_client ( client) ;
44
43
}
45
44
46
- type ctx = _chan < request > ;
45
+ type ctx = chan < request > ;
47
46
48
47
fn ip_to_sbuf ( ip : net:: ip_addr ) -> * u8 {
49
48
vec:: to_ptr ( str:: bytes ( net:: format_addr ( ip) ) )
50
49
}
51
50
52
- fn connect_task ( ip : net:: ip_addr , portnum : int , evt : _chan < socket_event > ) {
53
- let connecter: _port < client > = mk_port ( ) ;
54
- rustrt:: aio_connect ( ip_to_sbuf ( ip) , portnum, connecter . mk_chan ( ) ) ;
55
- let client = connecter . recv ( ) ;
51
+ fn connect_task ( ip : net:: ip_addr , portnum : int , evt : chan < socket_event > ) {
52
+ let connecter = port ( ) ;
53
+ rustrt:: aio_connect ( ip_to_sbuf ( ip) , portnum, chan ( connecter ) ) ;
54
+ let client = recv ( connecter ) ;
56
55
new_client ( client, evt) ;
57
56
}
58
57
59
- fn new_client ( client : client , evt : _chan < socket_event > ) {
58
+ fn new_client ( client : client , evt : chan < socket_event > ) {
60
59
// Start the read before notifying about the connect. This avoids a race
61
60
// condition where the receiver can close the socket before we start
62
61
// reading.
63
- let reader: _port < [ u8 ] > = mk_port ( ) ;
64
- rustrt:: aio_read ( client, reader . mk_chan ( ) ) ;
62
+ let reader: port < [ u8 ] > = port ( ) ;
63
+ rustrt:: aio_read ( client, chan ( reader ) ) ;
65
64
66
65
send ( evt, connected ( client) ) ;
67
66
68
67
while true {
69
68
log "waiting for bytes" ;
70
- let data: [ u8 ] = reader . recv ( ) ;
69
+ let data: [ u8 ] = recv ( reader ) ;
71
70
log "got some bytes" ;
72
71
log vec:: len :: < u8 > ( data) ;
73
72
if vec:: len :: < u8 > ( data) == 0 u {
@@ -83,42 +82,42 @@ fn new_client(client: client, evt: _chan<socket_event>) {
83
82
log "close message sent" ;
84
83
}
85
84
86
- fn accept_task ( client : client , events : _chan < server_event > ) {
85
+ fn accept_task ( client : client , events : chan < server_event > ) {
87
86
log "accept task was spawned" ;
88
- let p: _port < _chan < socket_event > > = mk_port ( ) ;
89
- send ( events, pending ( p . mk_chan ( ) ) ) ;
90
- let evt = p . recv ( ) ;
87
+ let p = port ( ) ;
88
+ send ( events, pending ( chan ( p ) ) ) ;
89
+ let evt = recv ( p ) ;
91
90
new_client ( client, evt) ;
92
91
log "done accepting" ;
93
92
}
94
93
95
- fn server_task ( ip : net:: ip_addr , portnum : int , events : _chan < server_event > ,
96
- server : _chan < server > ) {
97
- let accepter: _port < client > = mk_port ( ) ;
94
+ fn server_task ( ip : net:: ip_addr , portnum : int , events : chan < server_event > ,
95
+ server : chan < server > ) {
96
+ let accepter = port ( ) ;
98
97
send ( server,
99
- rustrt:: aio_serve ( ip_to_sbuf ( ip) , portnum, accepter . mk_chan ( ) ) ) ;
98
+ rustrt:: aio_serve ( ip_to_sbuf ( ip) , portnum, chan ( accepter ) ) ) ;
100
99
101
100
let client: client ;
102
101
while true {
103
102
log "preparing to accept a client" ;
104
- client = accepter . recv ( ) ;
103
+ client = recv ( accepter ) ;
105
104
if rustrt:: aio_is_null_client ( client) {
106
105
log "client was actually null, returning" ;
107
106
ret;
108
- } else { task:: _spawn ( bind accept_task ( client, events) ) ; }
107
+ } else { task:: spawn ( bind accept_task ( client, events) ) ; }
109
108
}
110
109
}
111
110
112
- fn request_task ( c : _chan < ctx > ) {
111
+ fn request_task ( c : chan < ctx > ) {
113
112
// Create a port to accept IO requests on
114
- let p: _port < request > = mk_port ( ) ;
113
+ let p = port ( ) ;
115
114
// Hand of its channel to our spawner
116
- send ( c, p . mk_chan ( ) ) ;
115
+ send ( c, chan ( p ) ) ;
117
116
log "uv run task spawned" ;
118
117
// Spin for requests
119
118
let req: request ;
120
119
while true {
121
- req = p . recv ( ) ;
120
+ req = recv ( p ) ;
122
121
alt req {
123
122
quit. {
124
123
log "got quit message" ;
@@ -127,10 +126,10 @@ fn request_task(c: _chan<ctx>) {
127
126
ret;
128
127
}
129
128
connect ( remote ( ip, portnum) , client) {
130
- task:: _spawn ( bind connect_task ( ip, portnum, client) ) ;
129
+ task:: spawn ( bind connect_task ( ip, portnum, client) ) ;
131
130
}
132
131
serve ( ip, portnum, events, server) {
133
- task:: _spawn ( bind server_task ( ip, portnum, events, server) ) ;
132
+ task:: spawn ( bind server_task ( ip, portnum, events, server) ) ;
134
133
}
135
134
write ( socket, v, status) {
136
135
rustrt:: aio_writedata ( socket, vec:: to_ptr :: < u8 > ( v) ,
@@ -148,27 +147,27 @@ fn request_task(c: _chan<ctx>) {
148
147
}
149
148
}
150
149
151
- fn iotask ( c : _chan < ctx > ) {
150
+ fn iotask ( c : chan < ctx > ) {
152
151
log "io task spawned" ;
153
152
// Initialize before accepting requests
154
153
rustrt:: aio_init ( ) ;
155
154
156
155
log "io task init" ;
157
156
// Spawn our request task
158
- let reqtask = task:: _spawn ( bind request_task ( c) ) ;
157
+ let reqtask = task:: spawn_joinable ( bind request_task ( c) ) ;
159
158
160
159
log "uv run task init" ;
161
160
// Enter IO loop. This never returns until aio_stop is called.
162
161
rustrt:: aio_run ( ) ;
163
162
log "waiting for request task to finish" ;
164
163
165
- task:: join_id ( reqtask) ;
164
+ task:: join ( reqtask) ;
166
165
}
167
166
168
167
fn new ( ) -> ctx {
169
- let p: _port < ctx > = mk_port ( ) ;
170
- task:: _spawn ( bind iotask ( p . mk_chan ( ) ) ) ;
171
- ret p . recv ( ) ;
168
+ let p: port < ctx > = port ( ) ;
169
+ task:: spawn ( bind iotask ( chan ( p ) ) ) ;
170
+ ret recv( p ) ;
172
171
}
173
172
174
173
// Local Variables:
0 commit comments