void introduceAsSponsor(Peer newPeer) { if (!isUniqueName(newPeer.name)) { Message new_msg = new Message(Message.messageType.INIT, itIsI); new_msg.CONTENT = new Message.Content(); new_msg.CONTENT.ROLE = Message.roleType.SPONSOR; new_msg.CONTENT.STATUS = Message.statusType.NOT_UNIQUE; newPeer.SendMessage(new_msg); Log("introduceAsSponsor NOT_UNIQUE"); } else { { Message msg = new Message(Message.messageType.INIT, itIsI); msg.CONTENT = new Message.Content(); msg.CONTENT.ROLE = Message.roleType.NODE; msg.CONTENT.NEWDATA = new Message.From(newPeer.name, newPeer.client.port, newPeer.client.IPaddr); foreach (Peer peer in peers.Values) { peer.SendMessage(msg); } } { Message msg = new Message(Message.messageType.INIT, itIsI); msg.CONTENT = new Message.Content(); msg.CONTENT.ROLE = Message.roleType.SPONSOR; msg.CONTENT.STATUS = Message.statusType.OK; if (peers.Values.Count > 0) //// CHECK !!! { msg.CONTENT.NODESDATA = new Message.From[peers.Values.Count]; int i = 0; foreach (Peer peer in peers.Values) { msg.CONTENT.NODESDATA[i] = new Message.From(peer.name, peer.client.port, peer.client.IPaddr); i++; } } newPeer.SendMessage(msg); } AddPeer(newPeer); Log("introduceAsSponsor NODE"); } }
public void OnReceive(Message msg) { ErrorLog("received from " + msg.FROM.UNIQUENAME + " type " + msg.TYPE + " current_state: " + currentState.ToString()); if (currentState == states.NOT_CONNECTED) { return; } if (msg.TYPE != Message.messageType.INIT && !peers.Keys.Contains(msg.FROM.UNIQUENAME)) { Message rsp = new Message(Message.messageType.DEAD, itIsI); rsp.CONTENT = new Message.Content(); rsp.CONTENT.STATUS = Message.statusType.RE_INIT; Peer temp = new Peer(msg.FROM.IP, msg.FROM.PORT, msg.FROM.UNIQUENAME); temp.SendMessage(rsp); return; } switch (msg.TYPE) { case Message.messageType.INIT: HandleIntroduction(msg); break; case Message.messageType.HIGHEST_SEQ_NUM: HandleHighestSeqNr(msg); break; case Message.messageType.REQUEST: HandleRequestCriticalSection(msg); break; case Message.messageType.REPLY: HandleReply(msg); break; case Message.messageType.YES_I_AM_HERE: HandleYes(msg); break; case Message.messageType.ARE_YOU_THERE: HandleAreUThere(msg); break; case Message.messageType.DEAD: HandleDead(msg); break; default: break; } }