Plan 9 from Bell Labs’s /usr/web/sources/contrib/maht/inferno/appl/cmd/rooster/rooster.b

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


implement Rooster;

include "sys.m";
	sys: Sys;

include "draw.m";
	draw: Draw;
	Context: import Draw;

include "bufio.m";
	bufio: Bufio;
	Iobuf: import bufio;

include "string.m";
	str: String;

include "encoding.m";
	enc : Encoding;

include "ppm.m";
	images : Images;
	Image : import images;

include "vnc.m";
	vnc : Vnc;
	Server, Rect : import vnc;
	
	
Rooster: module
{
	init:	fn(nil: ref Context, nil: list of string);
};

loadmods()
{
	sys = load Sys Sys->PATH;
	draw = load Draw Draw->PATH;
	bufio = load Bufio Bufio->PATH;
	str = load String String->PATH;
	enc = load Encoding Encoding->BASE64PATH;
	vnc = load Vnc "/usr/maht/rooster/vnc.dis";
	vnc->init(nil, nil);
	images = load Images "/usr/maht/rooster/ppm.dis";
	images->init(nil, nil);
}

listener(s : chan of ref Iobuf, conn : Sys->Connection)
{
	while(1) {
		(i, c) := sys->listen(conn);
		if(i==-1) return;
		c.dfd = sys->open(c.dir + "/data", sys->ORDWR);
		b := bufio->fopen(c.dfd, bufio->ORDWR);
		t := b.gets('\n');
		while(t != nil && len(t) != 2) {
			sys->print("%s", t);
			t = b.gets('\n');
		}
		b.puts("HTTP/1.1 200 OK
\nContent-Type: text/javascript
\n
\n");
		s <-= b;
	}
}

init(nil: ref Draw->Context, nil: list of string)
{
	loadmods();


	(i, c) := sys->announce("tcp!*!4005");
	if(i==-1) return;
	s := chan of ref Iobuf;
	spawn listener(s, c);

	urlfd := bufio->open("/usr/maht/rooster/x", bufio->OREAD);
	url : string;
	b64 := "";
	v : ref Server;
	for(b :=<- s; b!= nil; b =<- s) {
		if(b64 == "") {
			sys->sleep(10000);
			v = vnc->new_server("tcp!127.0.0.1!5902", "", 3, 1, 0);
		} else {
			v.send_framebuffer_request(0, ref Rect(0, 0, 1024, 768));
			images->create_ppm(v.image, b64 + ".ppm");
		}
		url = urlfd.gets('\n');
		if(url[len(url)-1] == '\n')
			url = url[0:len(url)-1];
		b64 = enc->enc(array of byte url);
sys->print("b64 %s\n", b64);
		b.puts(sys->sprint("go('%s');\n", url));
		b.flush();
		b.close();
	}
}


Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.