Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Python и СОМ технологии, важная большая тема 
:(
    Опции темы
GoD
Дата 19.10.2006, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 6.10.2006

Репутация: 1
Всего: 1



Как и обещал - код:

Код

#импорт модулей
import win32com.client.CLSIDToClass, pythoncom
import win32com.client.util
import win32event
import win32gui
import time
from pywintypes import IID
from win32com.client import Dispatch

defaultNamedOptArg=pythoncom.Empty
defaultNamedNotOptArg=pythoncom.Empty
defaultUnnamedArg=pythoncom.Empty
flag=flag2=flag3=flag4=0


#klass sobitii
class gammaEvents(win32com.client.getevents("gamma1.gamma1OLE")):
    def __init__(self, oobj = None):
        if oobj is None:
            self._olecp = None
        else:
            import win32com.server.util
            from win32com.server.policy import EventHandlerPolicy
            cpc=oobj._oleobj_.QueryInterface(pythoncom.IID_IConnectionPointContainer)
            print "cpc : ", cpc
            cp=cpc.FindConnectionPoint(self.CLSID_Sink)
            print "cp : ",cp
            cookie=cp.Advise(win32com.server.util.wrap(self, usePolicy=EventHandlerPolicy))
            print "cookie :", cookie
            self._olecp,self._olecp_cookie = cp,cookie

#functions definition            
    def __del__(self):
        try:
         self.close()
        except pythoncom.com_error:
         pass
        
    def close(self):
     if self._olecp is not None:
         cp,cookie,self._olecp,self._olecp_cookie = self._olecp,self._olecp_cookie,None,None
         cp.Unadvise(cookie)
         
    def _query_interface_(self, iid):
     import win32com.server.util
     if iid==self.CLSID_Sink: return win32com.server.util.wrap(self)

     # event pri avtorizacii
    def Ononauth(self, receive_id001=defaultNamedNotOptArg, o002=defaultNamedNotOptArg):
        global flag, authRes
        flag=1
        authRes = [receive_id001, o002]
        msg="onauth event raised!"
        print msg
        print authRes
        Logger(msg)
        if flag ==1: return authRes
# voob6e sobitii bol6e no vse ne budu opisivat - princip takoije


#funkciq logirovaniq v tekstovoi fail
def Logger(msg):
    infile=open("c:Log.txt","a")
    infile.write("--------------------------------\n")
    infile.write(msg)
    infile.write("\n")
    infile.close()

#funkciq avtorizacii
def Authorization():
    '''This funktion must raise Onauth event'''
    tr=0
    log = input("input login: ")
    pas = input("input password: ")
    n=tgamma.auth(None, log, pas, 0, 'demo')

    msg="authorization request is sent. waiting for event..."
    print msg
    Logger(msg)
    
    while not flag: 
        win32gui.PumpWaitingMessages() 
        print '...'
        tr=tr+1
        time.sleep(2)
        if tr == 10:
            msg = "No evet raised"
            Logger(msg)
            break
        pass
    if flag == 1:
        global res
        res = authRes
        return res

#funkciq vizova sync0() i polu4eniq vozvra6aemih parametrov
def SyncSes():
    tr=0
    tgamma.sync0()
    msg = "sync0 requested! waiting fot event..."
    print msg
    Logger(msg)

    while not flag2:
        win32gui.PumpWaitingMessages()
        print '...'
        tr=tr+1
        time.sleep(2)
        if tr == 10:
            msg = "No evet raised"
            Logger(msg)
            break
        pass
    if flag2 == 1:
        global synkres
        synkres = sync0Res
        return synkres

def GetInstr():
    #opisanie

    
def WaitQuote():
#    opisanie

def GetBar():
    #opisanie
        
#******************************************
#      Na4alo glavnoi programmi
#******************************************

tgamma = None
events = None

Logger('            --------------------\n            -New session begins-\n            --------------------')
win32com.client.gencache.EnsureModule('{81BD22A4-BC82-49D8-BE00-708F14314880}',0,1,1)

#Zaglushka()          #Dlq prednamerennoi ostanovki programmi

tgamma = win32com.client.Dispatch("gamma1.gamma1OLE")
events = gammaEvents(tgamma)



conn=tgamma.sconect(None,'143.241.51.41',6245)    #podklu4enie k serveru

#kontrolnoe povtorenie
#------------------------------------------
tgamma = None
events = None
tgamma = win32com.client.Dispatch("gamma1.gamma1OLE")
events = gammaEvents(tgamma)
conn=tgamma.sconect(None,'143.241.51.41',6245)
#------------------------------------------

if conn != 0:
    msg = "Didn't connected to server"
    print msg
    Logger(msg)

else:
    msg = "connected to server"
    print msg
    Logger(msg)

    re = Authorization()
    if flag == 1:
        if (re[0] == 1) and (re[1] == 0):
            synkres = SyncSes()
            inst = GetInstr()
        elif re[1] == 3:
            print "Session limit reached"
        elif re[1] == 2:
            print "Wrong password"
        else:
            pass





  Вот основная часть кода. Бубут вопросы спрашивайте.

Это сообщение отредактировал(а) GoD - 3.1.2007, 14:52
PM MAIL   Вверх
Cr@$h
Дата 20.10.2006, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41




M
Cr@$h
Для вставки кодов Python используй подсветку синтаксиса из раскрывающегося списка Код в форме ответа.

PM MAIL ICQ   Вверх
pythonwin
Дата 21.10.2006, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



GoD, т.е это уже рабочий, нормальный код?
PM WWW GTalk Jabber   Вверх
GoD
Дата 24.10.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 6.10.2006

Репутация: 1
Всего: 1



Цитата(pythonwin @  21.10.2006,  10:10 Найти цитируемый пост)
GoD, т.е это уже рабочий, нормальный код?


  Практически да! Это и есть обещанный рабочий код(в целях безопасности конечно изменил пару параметров, убрал ненужное оптсание функций, но сути это не меняет). Я дошел до этого момента(уже немало), как пример для работы с СОМ обьектами вполне пригоден. Уверяю, вполне рабочий вариант(Первый час после этого прорыва, я безмолвно с благоговением сидел и наблюдал, как отлавливаются события, присылаемые с сервера:-).
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0593 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.