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 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( 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 } } } } } }