def SendRequest(self, reqId, q, arh, discarded=None, efs=None): if q is None: q = CUQueue(bytearray(0)) if isinstance(q, CScopeUQueue): q = q.UQueue if not isinstance(q, CUQueue): raise ValueError('Bad input for parameter q') #http://stackoverflow.com/questions/21483482/efficient-way-to-convert-string-to-ctypes-c-ubyte-array-in-python bytes = (c_ubyte * q.GetSize()).from_buffer(q._m_bytes_, q._m_position_) h = self._m_ClientSocket_.Handle if h == 0: return False kv = None batching = False with self._lock_Send_: if arh or discarded or efs: kv = (reqId, CResultCb(arh, discarded, efs)) with self._lock_: batching = ccl.IsBatching(h) if batching: self._m_kvBatching_.append(kv) else: self._m_kvCallback_.append(kv) if ccl.SendRequest(h, reqId, bytes, q.GetSize()): return True if kv: with self._lock_: if batching: self._m_kvBatching_.pop() else: self._m_kvCallback_.pop() return False
def _s_(self, handler, sender, pGroup, count, pMessage, size): if not self.Push.OnPublish is None: self.Push.OnPublish( self, CSender(sender), CClientSocket._makeGroups_(pGroup, count), CUQueue(CClientSocket._prepareBytes(pMessage, size)).LoadObject())
def __init__(self, serviceId): super(CAsyncDBHandler, self).__init__(serviceId) self._csDB = threading.Lock() self._vColInfo = CDBColumnInfoArray() self._strConnection = u'' self._affected = -1 self._dbError = 0 self._dbErrorMsg = u'' self._lastReqId = 0 self._mapRowset = {} self._indexRowset = 0 self._Blob = CUQueue() self._vData = [] self._ms = tagManagementSystem.msUnknown self._flags = 0 self._deqResult = collections.deque() self._parameters = 0 self._indexProc = 0 self._output = 0 self._mapParameterCall = {} self._bCallReturn = 0 self._csOneSending = threading.Lock() self._queueOk = False self._mapHandler = {} self._nParamPos = 0
def SendUserMessage(self, message, userId, hint=''): if userId is None: userId = u'' q = CUQueue().SaveObject(message, hint) bytes = (c_ubyte * q.GetSize()).from_buffer(q._m_bytes_) return ccl.SendUserMessage(self._m_cs_.Handle, userId, bytes, q.GetSize())
def SendBlob(sb): start = True while sb.GetSize() > DB_CONSTS.DEFAULT_BIG_FIELD_CHUNK_SIZE: bytes = sb.PopBytes(DB_CONSTS.DEFAULT_BIG_FIELD_CHUNK_SIZE) if start: if not self.SendRequest(DB_CONSTS.idStartBLOB, CUQueue(bytes), None): return False start = False else: if not self.SendRequest(DB_CONSTS.idChunk, CUQueue(bytes), None): return False if not self.SendRequest(DB_CONSTS.idEndBLOB, sb, None): return False sb.SetSize(0) return True
def Publish(self, message, groups, hint=''): if groups is None: groups = () size = len(groups) arr = (c_uint * size)(*groups) q = CUQueue().SaveObject(message, hint) bytes = (c_ubyte * q.GetSize()).from_buffer(q._m_bytes_) return ccl.Speak(self._m_cs_.Handle, bytes, q.GetSize(), arr, size)
def SendRouteeResult(self, q, reqId=0): if q is None: q = CUQueue() if reqId == 0: reqId = self._m_ClientSocket_.CurrentRequestID h = self._m_ClientSocket_.Handle bytes = (c_ubyte * q.GetSize()).from_buffer(q._m_bytes_, q._m_position_) return ccl.SendRouteeResult(h, reqId, bytes, q.GetSize())
def _rp_(self, handler, reqId, size): ash = self._Seek_(self.CurrentServiceID) if not ash is None: mem = (c_char * size)() res = ccl.RetrieveResult(handler, mem, size) if res != size: if res == 0: return #socket closed msg = 'Wrong number of bytes retrieved (expected = ' + str(size) + ' and obtained = ' + str(res) raise ValueError(msg) q = CUQueue(mem) ash._OnRR_(reqId, q) if not self.RequestProcessed is None: self.RequestProcessed(self, reqId, size)
def SendRequest(self, reqId, q, arh): if q is None: q = CUQueue(bytearray(0)) if not isinstance(q, CUQueue): raise ValueError('Bad input for parameter q') #http://stackoverflow.com/questions/21483482/efficient-way-to-convert-string-to-ctypes-c-ubyte-array-in-python bytes = (c_ubyte * q.GetSize()).from_buffer(q._m_bytes_, q._m_position_) h = self._m_ClientSocket_.Handle if h == 0: return False with self._lock_Send_: if not (arh is None): kv = (reqId, arh) with self._lock_: if ccl.IsBatching(h): self._m_kvBatching_.append(kv) else: self._m_kvCallback_.append(kv) return ccl.SendRequest(h, reqId, bytes, q.GetSize())
def _sum_(self, handler, sender, pMessage, size): if not self.Push.OnSendUserMessage is None: self.Push.OnSendUserMessage(self, CSender(sender), CUQueue(CClientSocket._prepareBytes(pMessage, size)).LoadObject())