コード例 #1
0
ファイル: node.py プロジェクト: robotika/husky
    def publishTopic(self, topic):
        "establish connection with exactly one subscriber"
        print "PUBLISH", topic, (self.callerId, topic, lookupTopicType(topic)[0], self.callerApi)
        code, statusMessage, subscribers = self.master.registerPublisher(
            self.callerId, topic, lookupTopicType(topic)[0], self.callerApi
        )
        print subscribers

        serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        serverSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        serverSocket.bind((NODE_HOST, PUBLISH_PORT))
        print "Waiting ..."
        serverSocket.listen(1)
        soc, addr = serverSocket.accept()
        print "Connected by", addr
        data = soc.recv(1024)  # TODO properly load and parse/check
        print data
        print "LEN", len(data)
        header = prefix4BytesLen(
            prefix4BytesLen("callerid=" + self.callerId)
            + prefix4BytesLen("topic=" + topic)
            + prefix4BytesLen("type=" + lookupTopicType(topic)[0])
            + prefix4BytesLen("md5sum=" + lookupTopicType(topic)[1])
            + ""
        )
        soc.send(header)
        return soc
コード例 #2
0
ファイル: node.py プロジェクト: hoppss/husky
    def publishTopic(self, topic):
        "establish connection with exactly one subscriber"
        print "PUBLISH", topic, (self.callerId, topic,
                                 lookupTopicType(topic)[0], self.callerApi)
        code, statusMessage, subscribers = self.master.registerPublisher(
            self.callerId, topic,
            lookupTopicType(topic)[0], self.callerApi)
        print subscribers

        serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        serverSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        serverSocket.bind((NODE_HOST, PUBLISH_PORT))
        print "Waiting ..."
        serverSocket.listen(1)
        soc, addr = serverSocket.accept()
        print 'Connected by', addr
        data = soc.recv(1024)  # TODO properly load and parse/check
        print data
        print "LEN", len(data)
        header = prefix4BytesLen(
            prefix4BytesLen("callerid=" + self.callerId) +
            prefix4BytesLen("topic=" + topic) +
            prefix4BytesLen("type=" + lookupTopicType(topic)[0]) +
            prefix4BytesLen("md5sum=" + lookupTopicType(topic)[1]) + "")
        soc.send(header)
        return soc
コード例 #3
0
ファイル: node.py プロジェクト: robotika/husky
 def requestTopic(self, topic):
     code, statusMessage, publishers = self.master.registerSubscriber(
         self.callerId, topic, lookupTopicType(topic)[0], self.callerApi
     )
     assert code == 1, (code, statusMessage)
     assert len(publishers) == 1, (topic, publishers)  # i.e. fails if publisher is not ready now
     print publishers
     publisher = ServerProxy(publishers[0])
     code, statusMessage, protocolParams = publisher.requestTopic(self.callerId, topic, [["TCPROS"]])
     assert code == 1, (code, statusMessage)
     assert len(protocolParams) == 3, protocolParams
     print code, statusMessage, protocolParams
     hostPortPair = (protocolParams[1], protocolParams[2])
     soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # TCP
     soc.connect(hostPortPair)
     soc.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
     soc.setblocking(0)
     soc.settimeout(SOCKET_TIMEOUT)
     header = prefix4BytesLen(
         prefix4BytesLen("callerid=" + self.callerId)
         + prefix4BytesLen("topic=" + topic)
         + prefix4BytesLen("type=" + lookupTopicType(topic)[0])
         + prefix4BytesLen("md5sum=" + lookupTopicType(topic)[1])
         + ""
     )
     soc.send(header)
     return soc
コード例 #4
0
ファイル: node.py プロジェクト: hoppss/husky
 def requestTopic(self, topic):
     code, statusMessage, publishers = self.master.registerSubscriber(
         self.callerId, topic,
         lookupTopicType(topic)[0], self.callerApi)
     assert code == 1, (code, statusMessage)
     assert len(publishers) == 1, (
         topic, publishers)  # i.e. fails if publisher is not ready now
     print publishers
     publisher = ServerProxy(publishers[0])
     code, statusMessage, protocolParams = publisher.requestTopic(
         self.callerId, topic, [["TCPROS"]])
     assert code == 1, (code, statusMessage)
     assert len(protocolParams) == 3, protocolParams
     print code, statusMessage, protocolParams
     hostPortPair = (protocolParams[1], protocolParams[2])
     soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # TCP
     soc.connect(hostPortPair)
     soc.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
     soc.setblocking(0)
     soc.settimeout(SOCKET_TIMEOUT)
     header = prefix4BytesLen(
         prefix4BytesLen("callerid=" + self.callerId) +
         prefix4BytesLen("topic=" + topic) +
         prefix4BytesLen("type=" + lookupTopicType(topic)[0]) +
         prefix4BytesLen("md5sum=" + lookupTopicType(topic)[1]) + "")
     soc.send(header)
     return soc