>&& server objects (compile into COM-Exe) > >DEFINE CLASS oTestServer AS Session OLEPUBLIC > > loCallback = .NULL. && saves reference to callback object > lAdvised = .F. && is callbackobject set? > HIDDEN loTimer > > FUNCTION Init > DECLARE INTEGER Sleep IN WIN32API INTEGER > THIS.loTimer = CREATEOBJECT('dirTimer',THIS) > ENDFUNC > > FUNCTION Destroy > THIS.loTimer = NULL > CLEAR DLLS > ENDFUNC > > FUNCTION FireEvent AS VOID > LPARAMETERS lcSomeValue > IF THIS.lAdvised > THIS.loCallBack.EventMethod(lcSomeValue) > ENDIF > ENDFUNC > > FUNCTION Advise AS VOID > LPARAMETERS loObj > THIS.loCallback = loObj > THIS.lAdvised = .T. > ENDFUNC > > FUNCTION UnAdvise AS VOID > THIS.loCallback = .NULL. > THIS.lAdvised = .F. > ENDFUNC > > FUNCTION SomeMethodThatFiresEvents AS Boolean > && prepare something > THIS.FireEvent('Task startet .. ') > Sleep(5000) > THIS.FireEvent('Task finished X percent ..') > Sleep(5000) > && do more > THIS.FireEvent('Task fineshied XX percent ..') > && .. > ENDFUNC > > FUNCTION DoSomeAsynWork AS Boolean > THIS.loTimer.Interval = 1 > RETURN .T. > ENDFUNC > >ENDDEFINE > >DEFINE CLASS dirTimer AS Timer > > Interval = 0 > loParent = NULL > > FUNCTION Init > LPARAMETERS loObj > THIS.loParent = loObj > ENDFUNC > > FUNCTION Destroy > THIS.loParent = NULL > ENDFUNC > > FUNCTION Timer > THIS.Interval = 0 > && do some work > Sleep(1000) && sleep to simulate some work .. > THIS.loParent.FireEvent('Timer Fired') > ENDFUNC > >ENDDEFINE > >&& client testprogram >startprocess.prg: > >PUBLIC loFoxServer, loEventhandler > >loFoxServer = CREATEOBJECT('testcom1.oTestServer') >loEventHandler = CREATEOBJECT('oTestCallback') > >loFoxServer.Advise(loEventHandler) > >DEFINE CLASS oTestCallback AS Session OLEPUBLIC > > FUNCTION EventMethod > LPARAMETERS lcSomeParam > ? lcSomeParam > ENDFUNC > >ENDDEFINE > >startasyn.prg: > >?loFoxServer.DoSomeAsynWork() && returns immediately .. > >&& simulate block situation >DECLARE INTEGER Sleep IN WIN32API INTEGER >Sleep(15000) && the event of ther server is fired when this runs > > >endprocess.prg: > >loFoxServer.Unadvise() >loFoxServer = NULL >loEventhandler = NULL