System.IO.BACnet.BacnetMstpProtocolTransport.PollForMaster C# (CSharp) Method

PollForMaster() private method

private PollForMaster ( ) : StateChanges
return StateChanges
        private StateChanges PollForMaster()
        {
            BacnetMstpFrameTypes frame_type;
            byte destination_address;
            byte source_address;
            int msg_length;

            while (true)
            {
                //send
                SendFrame(BacnetMstpFrameTypes.FRAME_TYPE_POLL_FOR_MASTER, m_PS);

                //wait
                GetMessageStatus status = GetNextMessage(T_USAGE_TIMEOUT, out frame_type, out destination_address, out source_address, out msg_length);

                if (status == GetMessageStatus.Good)
                {
                    try
                    {
                        if (frame_type == BacnetMstpFrameTypes.FRAME_TYPE_REPLY_TO_POLL_FOR_MASTER && destination_address == m_TS)
                        {
                            m_sole_master = false;
                            m_NS = source_address;
                            m_PS = (byte)m_TS;
                            m_token_count = 0;
                            return StateChanges.ReceivedReplyToPFM;
                        }
                        else
                            return StateChanges.ReceivedUnexpectedFrame;
                    }
                    finally
                    {
                        RemoveCurrentMessage(msg_length);
                    }
                }
                else
                {
                    if (m_sole_master)
                    {
                        /* SoleMaster */
                        m_frame_count = 0;
                        return StateChanges.SoleMaster;
                    }
                    else
                    {
                        if (m_NS != m_TS)
                        {
                            /* DoneWithPFM */
                            return StateChanges.DoneWithPFM;
                        }
                        else
                        {
                            if ((m_PS + 1) % (m_max_master + 1) != m_TS)
                            {
                                /* SendNextPFM */
                                m_PS = (byte)((m_PS + 1) % (m_max_master + 1));
                                continue;
                            }
                            else
                            {
                                /* DeclareSoleMaster */
                                m_sole_master = true;
                                m_frame_count = 0;
                                return StateChanges.DeclareSoleMaster;
                            }
                        }
                    }
                }
            }
        }