Det är ett pictonary spel, problemmet är inte att det inte går att läsa data utan att programmet låser sig på den första socketen den fick data på. För att få den att gå vidare i loopen måste den få in data på den socketen den väntar på. Det innebär att om client A sickar data så kommer det fram, men om sedan B sickar det så kommer det inte fram förän A har skickat data igen.
Du kanse försår, men om det går att serialiserar ett image objekt och skicka det som en sträng med bufferedread så är det hela löst.
public void run()
{
System.out.println("run()");
ComThread comThread;
while(true)
{
try
{
processThread.sleep(400);
Object o2Send;
o2Send = this.checkMsg();
if(o2Send != null)
{
System.out.println(o2Send);
comThread = threadPool.freeThread();
comThread.sendMsg(o2Send, index);
}
}
catch(Exception e) {System.out.println(e);}
}
}
public Object checkMsg() //check all client sockets in the array for messages
{
Object transferedData = null;
int check = 0; //you dont won't to send out the key words to all users,
for(int i = 0; i<observer.player.length;i++)
{
try
{
if(observer.player[i].getIn() != null) {
if(observer.player[i].isFree() == false)
{
ObjectInputStream ois = observer.player[i].getIn();
transferedData = ois.readObject();
check = observer.checkMsg(transferedData,i);
index = i;
}
}
}
catch(IOException e) {System.out.println(e);}
catch(ClassNotFoundException e1) {System.out.println(e1);}
}
if(check != Observer.KEYWORD)
{
return transferedData;
}
else
return null;
}
det blir inte vackert om man infogar kod här.
Nu ser du ialla fall metoden som checkar data och tråden som kör metoden och anropar trådpolen.