def send(self, sensor_data, ack_num=0, timestamp=int(time.time()), ident=None, snum=None, dstip=None, dstport=None): if ident == None: ident = self.Ident if snum == None: snum = self.SNum if dstip == None: dstip = self.MCGroup if dstport == None: dstport = self.MCDstPort else: if version not in list(hdr_fmt.keys()): raise ValueError("Incorrect protocol version") try: print("Header:") print(self.Version) print(ident) print(snum) print(ack_num) print(timestamp) print(list(pld_fmt.keys())) msg = super(IPMcastWorker, self)._dgram_pack(self.Version, ident, snum, \ ack_num, timestamp) print(msg) if ack_num != 0: self.msg_queue[snum] = msg sent_size = self.working_socket.sendto(msg, (dstip, dstport)) self.SNum += self.SNumDelta return sent_size except socket.error: del msg return err['ErrSocketError'] except socket.timeout: del msg return err['ErrSocketTimeout'] except struct.error: del msg return err['ErrPacketFormat']
def __basic_init(self,Ident=1,Version=1, MaxMsgSize=opts['MaxMsgSize']): self.SNum = int((time.time() - int(time.time())) * time.time()) >> 16 self.SNumDelta = int((time.time() - int(time.time())) * time.time()) >> 20 self.MaxMsgSize = MaxMsgSize if Version not in (list(hdr_fmt.keys())): raise ValueError("Invalid protocol version") else: self.Version = Version if Ident not in range (1,65536): raise ValueError("Invalid ident") else: self.Ident = Ident
def _dgram_pack(self, sensor_data, ack_required=False, version=None, ident=None, snum=None, ack_num=0, timestamp=int(time.time())): if version == None: version = self.Version elif (version not in list(hdr_fmt.keys())): raise ValueError("Incorrect version field value") else: pass if ident == None: ident = self.Ident else: try: ident = int(ident) except Exception: raise ValueError("Incorrect ident field value") if snum == None: snum = self.SNum else: try: snum = int(snum) except Exception: raise ValueError("Incorrect serial number field value") send_buf = bytearray() try: send_buf.extend(struct.pack(hdr_fmt[self.Version], version, ident, snum, ack_num, timestamp) ) for data in sensor_data: send_buf.extend(struct.pack(pld_fmt[self.Version], data['sensor_id'], data['sensor_value'] ) ) return send_buf except struct.error: del send_buf return err['ErrPacketFormat'] except KeyError: del send_buf return err['ErrPacketFormat']