xref: /inferno-os/appl/examples/minitel/socket.b (revision e45fa0eb0763b57d6fb0649c064bc3b95ccdea6c)
1 #
2 # Copyright © 1998 Vita Nuova Limited.  All rights reserved.
3 #
4 
5 Socket: adt {
6 	m:		ref Module;		# common attributes
7 	in:		chan of ref Event;
8 
9 	init:		fn(c: self ref Socket);
10 	reset:	fn(c: self ref Socket);
11 	run:		fn(c: self ref Socket);
12 	quit:		fn(c: self ref Socket);
13 };
14 
15 Socket.init(c: self ref Socket)
16 {
17 	c.in = chan of ref Event;
18 	c.reset();
19 }
20 
21 Socket.reset(c: self ref Socket)
22 {
23 	c.m = ref Module(Pscreen, 0);
24 }
25 
26 Socket.run(c: self ref Socket)
27 {
28 Runloop:
29 	for(;;){
30 		ev := <- c.in;
31 		pick e := ev {
32 		Equit =>
33 			break Runloop;
34 		Eproto =>
35 			case e.cmd {
36 			Creset =>
37 				c.reset();
38 			* => break;
39 			}
40 		Edata =>
41 		}
42 	}
43 	send(nil);
44 }
45 
46 Socket.quit(c: self ref Socket)
47 {
48 	if(c==nil);
49 }
50