在Python中创建DDE服务器,然后连续发送数据



我正在尝试在Python中编写DDE服务器,该服务器需要连续更改为DDE客户端的程序。

连接到DDE服务器的程序使用以下DDE设置来连接[服务:Orbitron,主题:跟踪,项目:跟踪]。该程序必须接收DDE服务器以以下字符串格式发送的信息:" UP0 DN145000001 UMUSB DMFM AZ040 EL005 SNNO卫星"。

此字符串的内容大约每秒都会更改,我希望DDE服务器将新字符串发送给连接的DDE客户端,例如每秒。

我当前正在使用下面的代码,这是原始 ddeserver.py.py 文件的一个稍微修改的版本,请参见此处。

import win32ui
from pywin.mfc import object
import dde
class MySystemTopic(object.Object):
        def __init__(self):
                object.Object.__init__(self, dde.CreateServerSystemTopic())
        def Exec(self, cmd):
                print "System Topic asked to exec", cmd
class MyOtherTopic(object.Object):
        def __init__(self, topicName):
                object.Object.__init__(self, dde.CreateTopic(topicName))
        def Exec(self, cmd):
                print "Other Topic asked to exec", cmd
class MyRequestTopic(object.Object):
        def __init__(self, topicName):
                topic = dde.CreateTopic(topicName)
                topic.AddItem(dde.CreateStringItem(""))
                object.Object.__init__(self, topic)
        def Request(self, aString):
                print "Request Topic sent: ", aString
                a="UP0 DN145800001 UMusb DMfm AZ040 EL005 SNNO SATELLITE"
                print a
                return(a)
server = dde.CreateServer()
server.AddTopic(MyRequestTopic("Tracking"))
server.Create('Orbitron')    
while 1:
        win32ui.PumpWaitingMessages(0, -1)
        

运行代码时,我可以成功地与程序连接,并且一次接收了字符串(按照代码中提供)。我尝试了一些不同的事情,但是我还没有想到一种方法,以使DDE服务器不断地将字符串重新循环或类似。

>

任何建议都会非常欢迎。

P.S。我对Python,DDE和这个论坛是相对较新的,如果不清楚的话,我很抱歉。让我知道。

# coded by JayleoPlayGround
# use Portable Python 2.7.5.1 + pywin32-214

import time
import win32ui, dde
from pywin.mfc import object

class DDETopic(object.Object):
    def __init__(self, topicName):
        self.topic = dde.CreateTopic(topicName)
        object.Object.__init__(self, self.topic)
        self.items = {}
    def setData(self, itemName, value):
        try:
            self.items[itemName].SetData( str(value) )
        except KeyError:
            if itemName not in self.items:
                self.items[itemName] = dde.CreateStringItem(itemName)
                self.topic.AddItem( self.items[itemName] )
                self.items[itemName].SetData( str(value) )

ddeServer = dde.CreateServer()
ddeServer.Create('Orbitron')
ddeTopic = DDETopic('Tracking')
ddeServer.AddTopic(ddeTopic)
while True:
    yourData = time.ctime() + ' UP0 DN145000001 UMusb DMfm AZ040 EL005 SNNO SATELLITE'
    ddeTopic.setData('Tracking', yourData)
    win32ui.PumpWaitingMessages(0, -1)
    time.sleep(0.1)

相关内容

最新更新