%include global { const string srcID = "$Id$"; }; class TraceInvocations { oid clientObj; } inherits from Object; // client is public address... TraceInvocations:create(oid client) { array methodList; clientObj = client; send "setMeta"(thisObject) to clientObj; } TraceInvocations:delete() { if (clientObj != nil) { send "setMeta"(nil) to clientObj; } } TraceInvocations:disableTrace() { if (clientObj != nil) { send "setMeta"(nil) to clientObj; clientObj = nil; } if (fromObject != nil) return (0); } TraceInvocations:reflectedMessage(any destination, string methodName, array methodArgv, any fromObj) { display("reflectedMess:method=", methodName, " argv=",argv); send (methodName)(arrayToSet(methodArgv)) to clientObj from fromObj; } class Local . TestTrace { oid traceObj; } inherits from Object; TestTrace:create() { oid obj; assoc acl; int i; acl = makeDefaultACL(); obj = send "createObject"("TestTraceObj", acl) to ObjectCreator; traceObj = send "createObject"("TraceInvocations", acl, obj) to ObjectCreator; display("Start test\n"); for(i=1;i<=10;i+=1) { send "method1"(i) to obj; } i = send "disableTrace" to traceObj; // make sure it's deleted... send "method1"(-123) to obj; send "deleteYourself" to traceObj; send "deleteYourself" to obj; send "deleteYourself" to thisObject; } TestTrace:delete() { } class Local . TestTraceObj { oid traceObj; } inherits from Object; TestTraceObj:create() { display("TestTraceObj created\n"); } TestTraceObj:delete() { } TestTraceObj:method1() { display("TestTraceObj:method1, argv=", argv); }