convenience module for the python module generated from the core.proto IDL file.
This commit is contained in:
parent
3cf9c80d15
commit
ea3becb38b
1 changed files with 80 additions and 0 deletions
80
daemon/core/api/coreapi2.py
Normal file
80
daemon/core/api/coreapi2.py
Normal file
|
@ -0,0 +1,80 @@
|
|||
#
|
||||
# CORE
|
||||
# Copyright (c)2016 the Boeing Company.
|
||||
# See the LICENSE file included in this distribution.
|
||||
#
|
||||
# authors: Rod Santiago
|
||||
# John Kharouta
|
||||
#
|
||||
|
||||
"""
|
||||
This is a convenience module that imports the python module generated
|
||||
from the core.proto IDL
|
||||
"""
|
||||
|
||||
from core_pb2 import *
|
||||
import struct
|
||||
|
||||
|
||||
API2HDRFMT = "H"
|
||||
API2HDRSIZ = struct.calcsize(API2HDRFMT)
|
||||
|
||||
def pack(message):
|
||||
''' Pack an API2 message for transmission
|
||||
'''
|
||||
data = message.SerializeToString()
|
||||
return struct.pack(API2HDRFMT, len(data)) + data
|
||||
|
||||
|
||||
def recvAndUnpack(recv):
|
||||
''' Receive and unpack from coreapi2
|
||||
'''
|
||||
|
||||
try:
|
||||
hdr = recv(API2HDRSIZ)
|
||||
except Exception, e:
|
||||
raise IOError, "error receiving API 2 header (%s)" % e
|
||||
|
||||
if len(hdr) != API2HDRSIZ:
|
||||
if len(hdr) == 0:
|
||||
raise EOFError, "client disconnected"
|
||||
else:
|
||||
raise IOError, "invalid message header size"
|
||||
|
||||
dataToRead = struct.unpack(API2HDRFMT, hdr)[0]
|
||||
data = ""
|
||||
while len(data) < dataToRead:
|
||||
data += recv(dataToRead - len(data))
|
||||
return data
|
||||
|
||||
|
||||
def findNodeByIdx(exp, idx):
|
||||
''' Find a node with the given index in the given Experiment
|
||||
'''
|
||||
for a_node in exp.nodes:
|
||||
if a_node.idx == idx:
|
||||
return a_node
|
||||
return None
|
||||
|
||||
def findDeviceByIdx(exp, idx):
|
||||
''' Find a device with the given index in the given Experiment
|
||||
'''
|
||||
for a_dev in exp.devices:
|
||||
if a_dev.idx == idx:
|
||||
return a_dev
|
||||
return None
|
||||
|
||||
def getNodeByIdx(exp, idx):
|
||||
node = findNodeByIdx(exp, idx)
|
||||
if not node:
|
||||
node = exp.nodes.add()
|
||||
return node
|
||||
|
||||
def getDeviceByIdx(exp, idx):
|
||||
device = findDeviceByIdx(exp, idx)
|
||||
if not device:
|
||||
device = exp.devices.add()
|
||||
return device
|
||||
|
||||
|
||||
|
Loading…
Reference in a new issue