//su ogni rete (possono essere multiple o unica) possono esserci N listener che con un alg distrib si assegnano numeri progressivi unici //per ogni segnale ricevuto viene calcolato un hash [su (int32)(sender.roboid)%maxnum] che stabilisce quale listener dovrà processare il messaggio //se una dash non riceve un segnale da un listener manda una richiesta di resend al listener inadempiente. dopo 3 timeout la dash invia in broadcast un segnale di ListenerDown con il numero del listener, tutti i listener lo ricevono e ricalcolano il loro numero e il maxnum di conseguenza modificando la funzione hash e assorbendo i robot scoperti, il modello attuale però fa mandare dati errati per una intera finestra temporale perchè un robot può essere spostato da un listener funzionante ad un altro listener funzionante e ogni listener ha solo una parte dei segnali di quel robot, quindi è tragico come un riavvio completo... //invece potrei tenere tutti i listnernum uguali e ri-hashare solo per quelli con listener down, ma questo implica altri problemi, tipo sull'aggiunta di un listener si ripete lo stesso problema. public static List <ReceiverTool> staticInit() { ReceiverTool.all = new List <ReceiverTool>(); ReceiverTool.udpClients = new List <UdpClient>(); ReceiverTool.threads = new List <Thread>(); ReceiverTool.messageQueue = new MessageQueue(); return(ReceiverTool.all); }
//private UdpClient udpSender { }; public static List <SlaveReceiver> staticInit() { //IPEP_SlaveBroadcast_Receive = new IPEndPoint(IPAddress.Broadcast, Program.args.broadcastPort_Slaves); //IPEP_SlaveBroadcast_Send = new IPEndPoint(IPAddress.Broadcast, Program.args.broadcastPort_Slaves); SlaveReceiver.all = new List <SlaveReceiver>(); SlaveReceiver.udpClients = new List <UdpClient>(); SlaveReceiver.threads = new List <Thread>(); SlaveReceiver.SlaveMessageQueue = new MessageQueue(); return(SlaveReceiver.all); }