Beispiel #1
0
        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");
            }
        }
Beispiel #2
0
        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;
            }
        }