/*
* OnLineDatagramReceiver.java
*
* Created on den 6 september 2001, 14:28
*/
package ip1.u4.onLine;
import java.util.StringTokenizer;
import java.net.DatagramPacket;
/** skapar OnLineDatagramReceiver. Implementerar
* DatagramReceiver
*/
public class OnLineDatagramReceiver implements ip1.u4.net.DatagramReceiver {
/** referens till OnLine
*/
private OnLine onLine = null;
/** skapar OnLineDatagramReceiver implementerar
* DatagramReceiver. OnLineDatagramReceiver prosessar
* meddelanden genom att dela upp dem och skapa ett Userobjekt vars
* referens sedan skickas till {@link OnLine#addUser(User) OnLine.addUser(User)}.
* Arbetet sker i en nyskapad tråd.
* @param onLine Controllerklassen som tar emot de färdigprosessade meddelandena i
* form av Userobjekt.
*/
public OnLineDatagramReceiver(OnLine onLine) {
this.onLine = onLine;
}
/** implementeras för att processa meddelande på ett sätt som passar aktuell applikation.
*
* @param message meddelande att processa
*/
public void processMessage(DatagramPacket message) {
new OnLineRunnableDatagramReceiver(message);
}
/** Inre klass som utför det verkliga arbetet åt metoden processMessage i en egen tråd
*/
private class OnLineRunnableDatagramReceiver implements Runnable {
/** referens till meddelandet i den inre klassen OnLineRunnableDatagramReceiver
*/
private DatagramPacket message;
/** Inre klassens konstruktor, anropas av processMessage
* @param message meddelandet som skall processas.
*/
OnLineRunnableDatagramReceiver(DatagramPacket message) {
this.message = message;
(new Thread(this)).start();
}
/** implementerar Runnable i den inre klassen OnLineRunnableDatagramReceiver
*/
public void run() {
String name = "";
String host = "";
String comment = "";
String msg = new String(message.getData(), 0, message.getLength());
StringTokenizer st = new StringTokenizer(msg, " ");
String s;
while(! st.nextToken().equals("From:"));
while(! (s = st.nextToken()).equals("Host:")) {
name = name + s + " ";
}
while(! (s = st.nextToken()).equals("Comment:")) {
host = host + s + " ";
}
while (st.hasMoreTokens()) {
comment = comment + st.nextToken() + " ";
}
onLine.addUser(new User(name, host, comment));
}
}
}