The revelation of the RemObjServer object, which must be in an interface so the shared object code generator can retrieve it.
INTERFACEObValueRep ; FROM ObValue IMPORT ReplObj, ReplObjPublic, ValReplObj, ObjFields, ServerError, Exception, Error, Val, Vals; IMPORT SharedObj; REVEAL ReplObj = ReplObjPublic BRANDED "ReplObjServerRep" OBJECT who: TEXT; self: ValReplObj; protected: BOOLEAN; fields: REF ObjFields; pickleIn: REF ObjFields := NIL; pickleOut: REF ObjFields := NIL; METHODS InvokeUpdate(label: TEXT; argNo: INTEGER; READONLY args: Vals; VAR hint: INTEGER): Val RAISES {Error, Exception, ServerError, SharedObj.Error} := ReplObjInvokeUpdate; OVERRIDES init := ReplObjInit; Who := ReplObjWho; Select := ReplObjSelect; Invoke := ReplObjInvoke; Update := ReplObjUpdate; Has := ReplObjHas; Obtain := ReplObjObtain; END; PROCEDURE ReplObjInit(self: ReplObj): ReplObj; PROCEDURE ReplObjWho(self: ReplObj; VAR protected: BOOLEAN): TEXT; PROCEDURE ReplObjSelect(self: ReplObj; label: TEXT; VAR hint: INTEGER): Val RAISES {Error, Exception, ServerError, SharedObj.Error}; PROCEDURE ReplObjInvoke(self: ReplObj; label: TEXT; argNo: INTEGER; READONLY args: Vals; VAR hint: INTEGER): Val RAISES {Error, Exception, ServerError, SharedObj.Error}; PROCEDURE ReplObjInvokeUpdate(self: ReplObj; label: TEXT; argNo: INTEGER; READONLY args: Vals; VAR hint: INTEGER): Val RAISES {Error, Exception, ServerError}; PROCEDURE ReplObjUpdate(self: ReplObj; label: TEXT; val: Val; internal: BOOLEAN; VAR hint: INTEGER) RAISES {ServerError}; PROCEDURE ReplObjHas(self: ReplObj; label: TEXT; VAR hint: INTEGER): BOOLEAN; PROCEDURE ReplObjObtain(self: ReplObj; internal: BOOLEAN): REF ObjFields RAISES {ServerError}; END ObValueRep.