Changeset 199

Show
Ignore:
Timestamp:
06/26/02 10:06:03 (6 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBJabber/RBJabber/JabberConnection.py

    r192 r199  
    115115        self._SetDebug(fileIn, fileOut) 
    116116 
     117        # Create the sendData buffer and lock 
     118        try: 
     119            self._sendData = '' 
     120            import threading 
     121            self._sendDataLock = threading.Lock() 
     122        except ImportError: 
     123            self._sendDataLock = None 
     124 
    117125        # Create our socket 
    118         self._sendData = '' 
    119126        try: 
    120127            self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     
    160167        Note: the xml is not checked for validity, but the Jabber Servers get 
    161168        pretty upset when the data is invalid, and they tend to sever the socket.""" 
    162         self._sendData += xml 
     169        try: 
     170            if self._sendDataLock: self._sendDataLock.acquire() 
     171            self._sendData += xml 
     172        finally: 
     173            if self._sendDataLock: self._sendDataLock.release() 
    163174        return xml 
    164175 
     
    199210    def _ProcessWrite(self): 
    200211        """Called by the SmartSelect mechanism when the socket is ready to be written to.""" 
    201         nSent = self._SocketSend(self._sendData) 
    202         if self._fileOut: print >> self._fileOut, self._sendData[:nSent] 
    203         self._sendData = self._sendData[nSent:] 
     212        try: 
     213            if self._sendDataLock: self._sendDataLock.acquire() 
     214            nSent = self._SocketSend(self._sendData) 
     215            if self._fileOut: print >> self._fileOut, self._sendData[:nSent] 
     216            self._sendData = self._sendData[nSent:] 
     217        finally: 
     218            if self._sendDataLock: self._sendDataLock.release() 
    204219 
    205220    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    210225        """Similar to SendXML, except that _SendXMLImmediate only returns when all the pending 
    211226        XML data has been written to the socket.""" 
    212         self._sendData += xml 
    213         while self._sendData and select.select([], [self._socket], [], 0.5): 
    214             nSent = self._SocketSend(self._sendData) 
    215             if self._fileOut: print >> self._fileOut, self._sendData[:nSent] 
    216             self._sendData = self._sendData[nSent:] 
     227        try: 
     228            if self._sendDataLock: self._sendDataLock.acquire() 
     229            self._sendData += xml 
     230            while self._sendData and select.select([], [self._socket], [], 0.5): 
     231                nSent = self._SocketSend(self._sendData) 
     232                if self._fileOut: print >> self._fileOut, self._sendData[:nSent] 
     233                self._sendData = self._sendData[nSent:] 
     234        finally: 
     235            if self._sendDataLock: self._sendDataLock.release() 
    217236 
    218237    def _SocketRecv(self, limit=8192):