package org.apache.pig.backend.hadoop.executionengine.spark;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
/* TCPServer thread to serve missed Objects */
public class BroadCastServer extends Thread {
private ServerSocket serverSocket;
private static Map<Object, Object> storage = null;
int port;
public BroadCastServer() {
}
public BroadCastServer(int port) throws IOException {
this.port = port;
serverSocket = new ServerSocket(port);
}
public void run() {
while (true) {
try {
System.out.println("Waiting for client on port "
+ serverSocket.getLocalPort() + "...");
Socket server = serverSocket.accept();
System.out.println("Just connected to "
+ server.getRemoteSocketAddress());
DataInputStream in = new DataInputStream(
server.getInputStream());
String request = in.readUTF();
System.out.println("Executor asking for :" + request);
ObjectOutputStream out = new ObjectOutputStream(
server.getOutputStream());
if (storage.get(request) != null) {
out.writeObject(storage.get(request));
} else {
out.writeUTF("Requested resource not available!!");
}
server.close();
} catch (Exception s) {
s.printStackTrace();
break;
}
}
}
public void startBroadcastServer(int port) {
try {
storage = new HashMap<Object, Object>();
Thread t = new BroadCastServer(port);
t.start();
} catch (Exception e) {
e.printStackTrace();
}
}
public void addResource(String reference, Object resource) {
storage.put(reference, resource);
}
}