Monday, November 08, 2010 at 12:04 AM.

system.verbs.builtins.odbServer.daemon.daemon

on daemon (adrparams) {
	<<adrparams is the address of a table containing
		<<client -- a 4-byte encoded IP address, call netevents.addressToName to convert it to a string
		<<ready -- always true
		<<refcon -- always 0
		<<stream -- the stream id for this NetEvents message
	scratchpad.odbServerParams = adrparams^;
	local (s, x, bytespending);
	local (endcommand = "endodbservercommand");
	local (timeout = clock.ticks () + (user.odbserver.prefs.timeoutsecs * 60));
	loop {
		case netEvents.statusStream (adrparams^.stream, @bytespending) {
			"CLOSING";
			"CLOSED";
			"INACTIVE" {
				break};
			"DATA" {
				x = netEvents.readStream (adrParams^.stream, bytespending);
				s = s + x;
				if s endswith endcommand {
					s = string.mid (s, 1, sizeOf (s) - sizeOf (endcommand));
					msg ("Command received...");
					break}}};
		if clock.ticks () > timeout {
			s = "";
			break}};
	local (response = odbServer.commandHandle (s, adrparams));
	loop {
		local (chunksize = 5 * 1024);
		if sizeof (response) <= chunksize {
			netEvents.writeStream (adrparams^.stream, response);
			break};
		netEvents.writeStream (adrparams^.stream, string.mid (response, 1, chunksize));
		response = string.delete (response, 1, chunksize)}}



This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.