@ Override protected void initDebugger ( ) { // TODO: Maybe we want to extend the SmackDebugger for simplification // and a performance boost. // Initialize a empty writer which discards all data. writer = new Writer ( ) { @ Override public void write ( char [ ] cbuf , int off , int len ) { /* ignore */ } @ Override public void close ( ) { /* ignore */ } @ Override public void flush ( ) { /* ignore */ } } ; // Initialize a pipe for received raw data. try { readerPipe = new PipedWriter ( ) ; reader = new PipedReader ( readerPipe ) ; } catch ( IOException e ) { // Ignore } // Call the method from the parent class which initializes the debugger. super . initDebugger ( ) ; // Add listeners for the received and sent raw data. client . addBOSHClientResponseListener ( new BOSHClientResponseListener ( ) { @ Override public void responseReceived ( BOSHMessageEvent event ) { if ( event . getBody ( ) != null ) { try { readerPipe . write ( event . getBody ( ) . toXML ( ) ) ; readerPipe . flush ( ) ; } catch ( Exception e ) { // Ignore } } } } ) ; client . addBOSHClientRequestListener ( new BOSHClientRequestListener ( ) { @ Override public void requestSent ( BOSHMessageEvent event ) { if ( event . getBody ( ) != null ) { try { writer . write ( event . getBody ( ) . toXML ( ) ) ; } catch ( Exception e ) { // Ignore } } } } ) ; // Create and start a thread which discards all read data. readerConsumer = new Thread ( ) { private Thread thread = this ; private int bufferLength = 1024 ; @ Override public void run ( ) { try { char [ ] cbuf = new char [ bufferLength ] ; while ( readerConsumer == thread && ! done ) { reader . read ( cbuf , 0 , bufferLength ) ; } } catch ( IOException e ) { // Ignore } } } ; readerConsumer . setDaemon ( true ) ; readerConsumer . start ( ) ; }
Initialize the SmackDebugger which allows to log and debug XML traffic .