75 lines
2.0 KiB
Java
75 lines
2.0 KiB
Java
package Communication;
|
|
|
|
import com.google.protobuf.InvalidProtocolBufferException;
|
|
import com.google.protobuf.Message;
|
|
import meerkat.protobuf.DKGMessages;
|
|
|
|
import java.util.Queue;
|
|
import java.util.concurrent.ArrayBlockingQueue;
|
|
|
|
/**
|
|
* Created by Tzlil on 2/14/2016.
|
|
*/
|
|
// TODO: Change nane to network
|
|
|
|
public class User{
|
|
/*
|
|
* My view of
|
|
*/
|
|
|
|
|
|
|
|
protected final MailHandler mailHandler;
|
|
protected final Queue<DKGMessages.Mail> mailbox;
|
|
protected final int ID;
|
|
protected final Thread receiverThread;
|
|
private final Network network;
|
|
|
|
protected User(int ID, Network network, MailHandler mailHandler) {
|
|
this.mailbox = new ArrayBlockingQueue<DKGMessages.Mail>( network.n * network.n * network.n);
|
|
this.ID = ID;
|
|
this.mailHandler = mailHandler;
|
|
this.receiverThread = new Thread(new Receiver());
|
|
this.network = network;
|
|
}
|
|
|
|
public boolean send(int id, DKGMessages.Mail.Type type, Message message){
|
|
return network.sendMessage(this,id,type,message);
|
|
}
|
|
|
|
public void broadcast(DKGMessages.Mail.Type type, Message message){
|
|
network.sendBroadcast(this,type,message);
|
|
}
|
|
public MailHandler getMailHandler(){
|
|
return mailHandler;
|
|
}
|
|
public void setMessageHandler(MessageHandler messageHandler) {
|
|
mailHandler.setMessageHandler(messageHandler);
|
|
}
|
|
|
|
public int getID() {
|
|
return ID;
|
|
}
|
|
public Thread getReceiverThread(){
|
|
return receiverThread;
|
|
}
|
|
private class Receiver implements Runnable{
|
|
@Override
|
|
public void run() {
|
|
while (true){
|
|
if (!mailbox.isEmpty()){
|
|
mailHandler.handel(mailbox.poll());
|
|
}else{
|
|
try {
|
|
Thread.sleep(30);
|
|
} catch (InterruptedException e) {
|
|
// do nothing
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|