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
Exemple #2
0
 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())
Exemple #3
0
 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
Exemple #4
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())
Exemple #5
0
 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
Exemple #6
0
 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())
Exemple #8
0
 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())
Exemple #10
0
 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())