import pythoncom

import win32com.server.connect

# event ID-je

IID_IIntVolt = pythoncom.MakeIID("{9DF3E4B3-48DD-11D4-8CF7-005004E9490B}")

class cechoevt(win32com.server.connect.ConnectableServer):

    """

        Ez az echo class. Egyetlen funkciója az echo metódus, ami annyiszor

        visszhangozza a kapott paramétert, amennyi count értéke.

        cecho class-t módosítottam úgy, hogy IntVolt eseményt generáljon az echo metódus.

        Természetesen minden ID is változott, hiszen ez már egy másik class.

    """

    #regisztációs információk

    _public_methods_ = ['echo'] + win32com.server.connect.ConnectableServer._public_methods_

    _public_attrs_      = ['count']

    _connect_interfaces_ = [IID_IIntVolt]

    _reg_desc_ = 'Echo class IntVolt eseménnyel'

    _reg_clsid_ = '{9DF3E4B2-48DD-11D4-8CF7-005004E9490B}'

    _reg_progid_ = 'mechoevt.cechoevt'

    def __init__(self):

        win32com.server.connect.ConnectableServer.__init__(self)

        self.count=1    #default: az ismétlések száma 1 

        

    def echo(self,arg):

        #előbb megnézzük, hogy int-e a paraméter

        #ha igen, akkor eseményt generálunk

        if type(arg)==type(1):

            #sinkek hívása

            #2. paraméterben lehet az eseménykezelőnek adatot átadni

            self._BroadcastNotify(self.NotifyIntVolt, (arg,) )

        return map(lambda x,y=arg: y, range(self.count))

    

    def NotifyIntVolt(self, interface, arg):

        #interface a kliens oldali sink IDispatch interfésze

        #IDispatch interfész Invoke metóduse dispid-vel hivatkozik az interfész metódusaira

        #arg-ban most az int értéke van, amit echo kapott

        interface.Invoke(interface.GetIDsOfNames("IntVolt"), 0, pythoncom.DISPATCH_METHOD, 0,arg)

def Register():

    """

        Ez a legegyszerűbb regisztrációs módszer Python-ban.

    """

    from win32com.server.register import UseCommandLine

    return UseCommandLine(cechoevt)

if __name__=='__main__':

    Register()