• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
StringMessageSender(String host, int port)18   public StringMessageSender(String host, int port) {
19     super(host, port, false /* no ack */);
20   }
21 
StringMessageSender(String host, int port, boolean ack)22   public StringMessageSender(String host, int port, boolean ack) {
23     super(host, port, ack);
24   }
25 
26   @Override
sendMessage(IMessage message)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 
p(String msg)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
receiveMessage()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 
handleThrowable(Throwable cause)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 
receiveMessage(String message)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