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