package water.hadoop;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/**
* Simple class to help serialize messages from the Mapper to the Driver.
*/
class MapperToDriverMessage extends AbstractMessage {
public static final char TYPE_EMBEDDED_WEB_SERVER_IP_PORT = 12;
public static final char TYPE_FETCH_FLATFILE = 13;
public static final char TYPE_CLOUD_SIZE = 14;
public static final char TYPE_EXIT = 15;
private String _driverCallbackIp = null;
private int _driverCallbackPort = -1;
private char _type = TYPE_UNKNOWN;
private String _embeddedWebServerIp = "";
private int _embeddedWebServerPort = -1;
private int _cloudSize = -1;
private int _exitStatus = -1;
public MapperToDriverMessage() {
}
// Readers
// -------
public char getType() { return _type; }
public String getEmbeddedWebServerIp() { return _embeddedWebServerIp; }
public int getEmbeddedWebServerPort() { return _embeddedWebServerPort; }
public int getCloudSize() { return _cloudSize; }
public int getExitStatus() { return _exitStatus; }
public void read(Socket s) throws Exception {
_type = readType(s);
if (_type == TYPE_EMBEDDED_WEB_SERVER_IP_PORT) {
_embeddedWebServerIp = readString(s);
_embeddedWebServerPort = readInt(s);
}
else if (_type == TYPE_FETCH_FLATFILE) {
_embeddedWebServerIp = readString(s);
_embeddedWebServerPort = readInt(s);
}
else if (_type == TYPE_CLOUD_SIZE) {
_embeddedWebServerIp = readString(s);
_embeddedWebServerPort = readInt(s);
_cloudSize = readInt(s);
}
else if (_type == TYPE_EXIT) {
_embeddedWebServerIp = readString(s);
_embeddedWebServerPort = readInt(s);
_exitStatus = readInt(s);
}
else {
System.out.println ("MapperToDriverMessage: read: Unknown type");
// Ignore unknown types.
}
}
// Writers
// -------
public void setDriverCallbackIpPort(String ip, int port) {
_driverCallbackIp = ip;
_driverCallbackPort = port;
}
public String getDriverCallbackIp() { return _driverCallbackIp; }
public int getDriverCallbackPort() { return _driverCallbackPort; }
public void setMessageEmbeddedWebServerIpPort(String ip, int port) {
_type = TYPE_EMBEDDED_WEB_SERVER_IP_PORT;
_embeddedWebServerIp = ip;
_embeddedWebServerPort = port;
}
public void setMessageFetchFlatfile(String ip, int port) {
_type = TYPE_FETCH_FLATFILE;
_embeddedWebServerIp = ip;
_embeddedWebServerPort = port;
}
public void setMessageCloudSize(String ip, int port, int cloudSize) {
_type = TYPE_CLOUD_SIZE;
_embeddedWebServerIp = ip;
_embeddedWebServerPort = port;
_cloudSize = cloudSize;
}
public void setMessageExit(String ip, int port, int exitStatus) {
_type = TYPE_EXIT;
_embeddedWebServerIp = ip;
_embeddedWebServerPort = port;
_exitStatus = exitStatus;
}
public void write(Socket s) throws Exception {
if (_type == TYPE_EMBEDDED_WEB_SERVER_IP_PORT) {
writeMessageEmbeddedWebServerIpPort(s);
}
else if (_type == TYPE_FETCH_FLATFILE) {
writeMessageFetchFlatfile(s);
}
else if (_type == TYPE_CLOUD_SIZE) {
writeMessageCloudSize(s);
}
else if (_type == TYPE_EXIT) {
writeMessageExit(s);
}
else {
throw new Exception("MapperToDriverMessage: write: Unknown type");
}
s.getOutputStream().flush();
}
//-----------------------------------------------------------------
// Private below this line.
//-----------------------------------------------------------------
private void writeMessageEmbeddedWebServerIpPort(Socket s) throws Exception {
writeType(s, TYPE_EMBEDDED_WEB_SERVER_IP_PORT);
writeString(s, _embeddedWebServerIp);
writeInt(s, _embeddedWebServerPort);
}
private void writeMessageFetchFlatfile(Socket s) throws Exception {
writeType(s, TYPE_FETCH_FLATFILE);
writeString(s, _embeddedWebServerIp);
writeInt(s, _embeddedWebServerPort);
}
private void writeMessageCloudSize(Socket s) throws Exception {
writeType(s, TYPE_CLOUD_SIZE);
writeString(s, _embeddedWebServerIp);
writeInt(s, _embeddedWebServerPort);
writeInt(s, _cloudSize);
}
private void writeMessageExit(Socket s) throws Exception {
writeType(s, TYPE_EXIT);
writeString(s, _embeddedWebServerIp);
writeInt(s, _embeddedWebServerPort);
writeInt(s, _exitStatus);
}
}