Classe thread che gestisce la connessione socket.
Questa classe verrà invocata dalla classe del server socket per la gestione
della comunicazione con un client.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringReader;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
public class MessageThread extends Thread {
private Socket socket;
private Socket alarmsocket;
private BufferedReader socketBuffer;
private PrintWriter socketWriter;
private PrintWriter alarmsocketWriter;
public MessageThread(Socket socket) {
this.socket = socket;
try {
alarmsocket = new Socket("192.168.10.2", 5000);
} catch (IOException ex) {
Logger.getLogger(MessageThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
public MessageThread(Socket socket, String ip, int port) {
this.socket = socket;
try {
alarmsocket = new Socket(ip, port);
} catch (IOException ex) {
Logger.getLogger(MessageThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void Run() {
boolean enable = true;
try {
// definizione oggetti per comunicazione via socket
socketBuffer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
socketWriter = new PrintWriter(socket.getOutputStream());
alarmsocketWriter = new PrintWriter(alarmsocket.getOutputStream());
// definizione per unmarshal
JAXBContext jaxbContext = JAXBContext.newInstance(Message.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
// ciclo di lettura dal socket
while(enable) {
String str = socketBuffer.readLine();
// conversione della stringa arrivata nell'oggetto corrispondente
Message msg = (Message) unmarshaller.unmarshal(new StringReader(str));
String text = msg.getText();
if (text.indexOf("Allarme:") >= 0) {
socketWriter.println("ALM");
alarmsocketWriter.println("A");
}
else if (text.indexOf("Messaggio:") >= 0) {
socketWriter.println("MSG");
}
else if (text.equals("end connection")) {
enable = false;
}
else {
socketWriter.println("NOT");
}
}
} catch (Exception ex) {
Logger.getLogger(MessageThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
}