package com.idega.block.messenger.servlet;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.idega.block.messenger.business.ClientManager;
import com.idega.block.messenger.business.MessageManager;
import com.idega.block.messenger.data.Packet;
import com.idega.servlet.IWCoreServlet;
public class ClientServer extends IWCoreServlet{
public static String MESSENGER_JAR_FILE = "messenger.jar";
public static String MESSENGER_APPLET_CLASS = "com.idega.block.messenger.presentation.MessengerApplet";
public static String SERVLET_URL = "servlet/ClientServer";
/**
* This method is used for applets.
*
* Receives and sends the data using object serialization.
*
* Gets an input stream from the applet and reads a Packet object. Then
* registers the Packet to that users session. Finally, sends a confirmation
* message back to the applet.
*/
public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{
Packet packet = receivePacket(request);
ClientManager cManager = (ClientManager) getApplication().getAttribute("ClientManager");
if( cManager == null){
cManager = new ClientManager();
getApplication().setAttribute("ClientManager",cManager);
}
cManager.processPacket(packet);
//System.out.println("Client Manager is done");
MessageManager mManager = (MessageManager) getApplication().getAttribute("MessageManager");
if( mManager == null){
mManager = new MessageManager();
getApplication().setAttribute("MessageManager",mManager);
}
mManager.processPacket(packet);
//System.out.println("Message Manager is done");
sendPacket(response, packet);
}
/**
* calls doPost
*/
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
//System.out.println("ClientServer : in doGet ");
doPost(request,response);
}
private void sendPacket(HttpServletResponse response, Packet packet){
ObjectOutputStream outputToApplet;
try{
response.setContentType("application/octet-stream");
outputToApplet = new ObjectOutputStream(response.getOutputStream());
//System.out.println("sendPacket : Sending Packet to applet...");
outputToApplet.writeObject(packet);
outputToApplet.flush();
outputToApplet.close();
//System.out.println("sendPacket : Data transmission complete.");
}
catch (IOException e){
e.printStackTrace(System.err);
}
}
private Packet receivePacket(HttpServletRequest request){
ObjectInputStream inputFromApplet = null;
Packet packet = null;
try{
// get an input stream from the applet
inputFromApplet = new ObjectInputStream(request.getInputStream());
//System.out.println("receivePacket : Connected");
// read the serialized Packet data from applet
//System.out.println("receivePacket : Reading data...");
packet = (Packet) inputFromApplet.readObject();
//System.out.println("receivePacket : Finished reading.");
inputFromApplet.close();
//System.out.println("receivePacket : Complete.");
}
catch (Exception e){
e.printStackTrace(System.err);
}
return packet;
}
}