def __handleReceivedData(self, buff, info): self.__bytesReceived += len(buff) totalCount = 0 if self.getIsSynchronous(): arg = None with self.__syncBase.getSync(): self.__syncBase.appendData(buff, 0, len(buff)) #Search end of packet if it is given. if self.eop: tmp = _GXSynchronousMediaBase.toBytes(self.eop) totalCount = _GXSynchronousMediaBase.indexOf( buff, tmp, 0, len(buff)) if totalCount != -1: if self.trace == TraceLevel.VERBOSE: arg = TraceEventArgs(TraceTypes.RECEIVED, buff, 0, totalCount + 1) self.__syncBase.setReceived() if arg: self.__notifyTrace(arg) else: self.__syncBase.resetReceivedSize() if self.trace == TraceLevel.VERBOSE: self.__notifyTrace(TraceEventArgs(TraceTypes.RECEIVED, buff)) e = ReceiveEventArgs(buff, info) self.__notifyReceived(e)
def __notifyClientConnected(self, e): """Notify that client has connected.""" for it in self.__netListeners: it.onClientConnected(self, e) if int(self.trace) >= int(TraceLevel.INFO): for it in self.__listeners: it.onTrace( self, TraceEventArgs(TraceTypes.INFO, "Client connected."))
def send(self, data, receiver=None): if not self.__h: raise Exception("Serial port is not open.") if self.__trace == TraceLevel.VERBOSE: self.__notifyTrace(TraceEventArgs(TraceTypes.SENT, data)) #Reset last position if end of packet is used. with self.__syncBase.getSync(): self.__syncBase.resetLastPosition() if not isinstance(data, bytes): data = bytes(_GXSynchronousMediaBase.toBytes(data)) self.__h.write(data) self.__bytesSent += len(data)
def send(self, data, receiver=None): if not self.__socket: raise Exception("Invalid connection.") if self.__trace == TraceLevel.VERBOSE: self.__notifyTrace(TraceEventArgs(TraceTypes.SENT, data)) #Reset last position if end of packet is used. with self.__syncBase.getSync(): self.__syncBase.resetLastPosition() if not isinstance(data, bytes): data = bytes(_GXSynchronousMediaBase.toBytes(data)) if isinstance(receiver, _NetReceiveEventArgs): receiver.socket.sendall(data) else: self.__socket.sendall(data) self.__bytesSent += len(data)
def open(self): self.close() if not self.__portName: raise Exception("Serial port is not selected.") with self.__syncBase.getSync(): self.__syncBase.resetLastPosition() self.__notifyMediaStateChange(MediaState.OPENING) if self.__trace & TraceLevel.INFO != 0: eopString = str(self.eop) self.__notifyTrace(TraceEventArgs(TraceTypes.INFO,\ "Settings: Port: " + self.__portName + " Baud Rate: " + str(self.baudRate) + \ " Data Bits: " + str(int(self.dataBits)) + " Parity: " + str(self.parity) + \ " Stop Bits: " + str(self.stopBits) + " Eop:" + eopString)) self.__h.open(self.__portName) self.__closing.clear() self.rtsEnable = True self.dtrEnable = True self.__notifyMediaStateChange(MediaState.OPEN) self.__receiver = threading.Thread(target=self.__readThread) self.__receiver.start()
def __notifyMediaStateChange(self, state): ###Notify client from media state change. for it in self.__listeners: if self.__trace & TraceLevel.ERROR != 0: it.onTrace(self, TraceEventArgs(TraceTypes.INFO, state)) it.onMediaStateChange(self, MediaStateEventArgs(state))
def __notifyError(self, ex): """Notify clients from error occurred.""" for it in self.__listeners: it.onError(self, ex) if self.__trace & TraceLevel.ERROR != 0: it.onTrace(self, TraceEventArgs(TraceTypes.ERROR, ex))