xref: /inferno-os/appl/collab/lib/messages.m (revision 46439007cf417cbd9ac8049bb4122c890097a0fa)
1Messages:  module
2{
3	PATH:	con "/dis/collab/lib/messages.dis";
4
5	Msg: adt {
6		from:	cyclic ref User;
7		data:		array of byte;
8		next:		cyclic ref Msg;
9	};
10
11	Msglist: adt {
12		tail:		ref Msg;
13		readers:	list of (ref User, ref Readreq);
14
15		new:		fn(): ref Msglist;
16		flushfid:	fn(nil: self ref Msglist, fid: int);
17		flushtag:	fn(nil: self ref Msglist, tag: int);
18		wait:		fn(nil: self ref Msglist, u: ref User, r: ref Readreq);
19		write:	fn(nil: self ref Msglist, m: ref Msg): list of (ref User, ref Readreq);
20		queue:	fn(nil: self ref Msglist): ref Msg;
21	};
22
23	Readreq: adt {
24		tag:	int;
25		fid:	int;
26		count:	int;
27		offset:	big;
28	};
29
30	User: adt {
31		id:	int;
32		fid:	int;
33		name:	string;
34		queue:	cyclic ref Msg;
35
36		new:	fn(fid: int, name: string): ref User;
37		initqueue:	fn(nil: self ref User, msgs: ref Msglist);
38		read:	fn(nil: self ref User): ref Msg;
39	};
40
41	init:	fn();
42};
43