meerkat-java/destributed-key-generation/src/main/java/Communication/User.java

69 lines
1.9 KiB
Java
Raw Normal View History

2016-02-17 15:58:20 -05:00
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.
*/
public class User{
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>(2 * 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);
}
2016-02-23 12:02:49 -05:00
public void setMessageHandler(MessageHandler messageHandler) {
mailHandler.setMessageHandler(messageHandler);
2016-02-17 15:58:20 -05:00
}
public int getID() {
return ID;
}
public Thread getReceiverThread(){
return receiverThread;
}
private class Receiver implements Runnable{
@Override
public void run() {
while (true){
if (!mailbox.isEmpty()){
try {
mailHandler.handel(mailbox.poll());
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
}else{
try {
Thread.sleep(30);
} catch (InterruptedException e) {
// do nothing
}
}
}
}
}
}