I've included in this release of isectd, the *prototype* 
of an interface for CinCom's (formerly ObjectShare 
formerly ParcPlace) VisualWave Smalltalk.  It was developed
using VWNC (Non Commercial) 3.1.  Its available in
file-in format.

Though not complete, the philosophy of the interface is 
there:

a) a single class (IsdIO) represents the library
   of routines that exist in a shared library.
   I decided to use a shared library because 
   1) it was working
   2) I didn't want to rewrite it
   3) If I did rewrite it, it would have violated
      my Re-use beliefs
   4) I didn't want to re-rewrite it for each
      VM I may want to port it to
   5) Enough about why I'm using the shared library

b) IsdClient is the base (abstract) class for both
   clients and workers.  It maintains as instance
   variables a reference to an IsdIO instance,
   and isdHeader, and the socket for communicating
   with isectd on.

c) IsdClient, and it's subclass IsdWorker define
   similar methods as IsdIO's, except that the
   socket and sometimes the isdHeader are now
   unnecessary arguments since the instance
   variables can be used.

d) IsdEcho, a smalltalk version of the 
   demo worker program, isdecho, has been created
   as both a demonstration of how easy the smalltalk
   interface is, as well as to provide an abstract
   class that other workers can be subclassed from.
   To create a total different worker that requires
   only a single request packet, override IsdEcho's
   work: method.  For instance, to create a worker
   called IsdHello, which responds to any message
   it receives with the text "Hello, world!"
   all that would be required is to create

   work: aByteArray

       self send: 'Hello, world!'.

	should be that easy.

Starting it up

The Smalltalk echo worker is created using by evaluating
the code:

	EfiMain saveHeadlessNamed: 'echo' startWith: IsdEcho.

The result of the above expression should be a headless
image named "echo.im", which is executable.  The visual
executable must be in the searchpath.

WARNING:

	During testing, I've been getting errors from
	isectd complaing of an interrupted system
	call while connecting with the worker.  This 
	makes absolutely no sense since all SIGINTR's
	are being handled in isdRecvAll().  I'm sus-
	pecting it's left-over from a previous IO
	and that there's really some other problem.
	This really isn't a problem.  All I do
	is highlight the text again and select "do it"
	until the error stops appearing and isectd
	reports the working has successfully logged
	in.

	The current interface is pretty weak
	when it comes to exception handling.
	Since isdexecd takes care of restarting
	workers I've never been concernec about
	getting them restarted, but this will
	become more of an issue with Smalltalk
	since the worker should really clean-up
	after itself after an unexpected
	problem.  Currently, the biggest problem
	is the socket needs to be closed.  But,
	like I said, this is only a problem if the
	image isn't closed and when this happens
	on my development box I simply stop and
	restart the image which automatically
	closes the socket (isectd then
	reports an on-strike worker).

An Appeal to Smalltalkers

	My background in Smalltalk is pretty thin.
	I've read a lot about it, and have created
	interfaces to isectd before in Smalltalk/X,
	Dolphin, and Smalltalk Express--and this
	is probably the best conceptual model
	I've created.

	If you have suggestions, comments, or 
	pointers, please email me at 
	tgagne@ix.netcom.com.  I'm especially
	interested in guidance on exception handling.

