Home | History | Annotate | Download | only in strprotocol
      1 package org.testng.remote.strprotocol;
      2 
      3 import org.testng.remote.RemoteTestNG;
      4 
      5 import java.io.BufferedReader;
      6 import java.io.BufferedWriter;
      7 import java.io.IOException;
      8 import java.io.InputStreamReader;
      9 import java.io.OutputStreamWriter;
     10 import java.io.PrintWriter;
     11 import java.io.UnsupportedEncodingException;
     12 import java.net.SocketException;
     13 
     14 public class StringMessageSender extends BaseMessageSender {
     15 
     16   private PrintWriter writer;
     17 
     18   public StringMessageSender(String host, int port) {
     19     super(host, port, false /* no ack */);
     20   }
     21 
     22   public StringMessageSender(String host, int port, boolean ack) {
     23     super(host, port, ack);
     24   }
     25 
     26   @Override
     27   public void sendMessage(IMessage message) {
     28     if (m_outStream == null) {
     29       throw new IllegalStateException("Trying to send a message on a shutdown sender");
     30     }
     31     if (writer == null) {
     32       try {
     33         writer = new PrintWriter(new BufferedWriter(
     34             new OutputStreamWriter(m_outStream, "UTF-8")), //$NON-NLS-1$
     35             false /* autoflush */);
     36       } catch (UnsupportedEncodingException e1) {
     37         writer = new PrintWriter(new BufferedWriter(
     38             new OutputStreamWriter(m_outStream)),
     39             false /* autoflush */);
     40       }
     41     }
     42 
     43     String msg = ((IStringMessage) message).getMessageAsString();
     44     if (RemoteTestNG.isVerbose()) {
     45       p("Sending message:" + message);
     46       p("  String version:" + msg);
     47 
     48       StringBuffer buf = new StringBuffer();
     49       for(int i = 0; i < msg.length(); i++) {
     50         if('\u0001' == msg.charAt(i)) {
     51           p("  word:[" + buf.toString() + "]");
     52           buf.delete(0, buf.length());
     53         }
     54         else {
     55           buf.append(msg.charAt(i));
     56         }
     57       }
     58       p("  word:[" + buf.toString() + "]");
     59     }
     60 
     61     synchronized(m_ackLock) {
     62       writer.println(msg);
     63       writer.flush();
     64       waitForAck();
     65     }
     66   }
     67 
     68   private static void p(String msg) {
     69     if (RemoteTestNG.isVerbose()) {
     70       System.out.println("[StringMessageSender] " + msg); //$NON-NLS-1$
     71     }
     72   }
     73 
     74   @Override
     75   public IMessage receiveMessage() {
     76     IMessage result = null;
     77 
     78     if (m_inReader == null) {
     79       try {
     80         m_inReader = new BufferedReader(new InputStreamReader(m_inStream, "UTF-8"));
     81       } catch (UnsupportedEncodingException e) {
     82         m_inReader = new BufferedReader(new InputStreamReader(m_inStream));
     83       }
     84     }
     85     try {
     86 //      try {
     87 //        m_outputWriter = new PrintWriter(new OutputStreamWriter(fSocket.getOutputStream(), "UTF-8"),
     88 //                                  true);
     89 //      }
     90 //      catch(UnsupportedEncodingException e1) {
     91 //        m_outputWriter = new PrintWriter(new OutputStreamWriter(fSocket.getOutputStream()), true);
     92 //      }
     93       result = receiveMessage(m_inReader.readLine());
     94     } catch(IOException e) {
     95       handleThrowable(e);
     96     }
     97 
     98     return result;
     99 //    finally {
    100 //      shutDown();
    101 //      return null;
    102 //    }
    103   }
    104 
    105   protected void handleThrowable(Throwable cause) {
    106     if (RemoteTestNG.isVerbose()) {
    107       cause.printStackTrace();
    108     }
    109   }
    110 
    111 //  private String readMessage(BufferedReader in) throws IOException {
    112 //    return in.readLine();
    113 //  }
    114 
    115   private IMessage receiveMessage(String message) {
    116     if (message == null) return null;
    117     IMessage result = null;
    118 
    119     int messageType = MessageHelper.getMessageType(message);
    120 
    121 //    try {
    122       if(messageType < MessageHelper.SUITE) {
    123         // Generic message
    124         result = MessageHelper.unmarshallGenericMessage(message);
    125       }
    126       else if(messageType < MessageHelper.TEST) {
    127         // Suite message
    128         result = MessageHelper.createSuiteMessage(message);
    129       }
    130       else if(messageType < MessageHelper.TEST_RESULT) {
    131         // Test message
    132         result = MessageHelper.createTestMessage(message);
    133       }
    134       else {
    135         // TestResult message
    136         result = MessageHelper.unmarshallTestResultMessage(message);
    137       }
    138 //    }
    139 //    finally {
    140 //      if(isRunning() && (null != m_outputWriter)) {
    141 //        m_outputWriter.println(MessageHelper.ACK_MSG);
    142 //        m_outputWriter.flush();
    143 //      }
    144 //    }
    145 
    146     p("receiveMessage() received:" + result);
    147     return result;
    148   }
    149 }
    150