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

system.verbs.builtins.tcp.im.server

on server (driverName, screenname, message) {
	<<Changes
		<<9/21/02; 6:08:35 PM by JES
			<<If no responder handles the message, don't send a return message to the sender. Prevents infinite loops when talking to another implementation of tcp.im.
		<<8/11/02; 7:58:43 PM by JES
			<<Follow addresses when finding responder tables. Allows for easy installation of drivers by a Tool, for example.
	local (fldebug = false);
	if fldebug {
		if not defined (workspace.message) or string (workspace.message) == "" {
			wp.newTextObject (message, @workspace.message)}};
	local (startticks = clock.ticks (), adr);
	tcp.im.init ();
	for adr in @user.im.responders {
		try {
			while typeOf (adr^) == addressType {
				adr = adr^};
			if adr^.enabled {
				if adr^.condition (screenname, message) {
					try {
						local (response = adr^.script (driverName, screenname, message));
						if user.im.prefs.flLog {
							tcp.im.log.add ("Response to \"" + screenname + "\": \"" + response + "\", by responder " + nameof (adr^) + ".", startticks)};
						return}
					else {
						if user.im.prefs.flLog {
							tcp.im.log.add ("Error response to \"" + screenname + "\": " + tryError + " by responder " + nameof (adr^) + ".", startticks)};
						return tcp.im.send (driverName, screenName, "Can't complete your request because an error occurred: \"" + tcp.im.utilities.cleanError (tryerror) + "\"")}}}}};
	if user.im.prefs.flLog {
		tcp.im.log.add ("Error response to \"" + screenname + "\": No responder accepted the message.", startticks)}}
	<<tcp.im.send (driverName, screenName, user.im.prefs.sorryMessage)
<<bundle //test code
	<<dialog.alert (server ("aim", "xxx", "news"))



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.