標誌位的設置如下:
union{ struct { DWORD m_fOption :1; DWORD m_fDescribe :1; DWORD m_fSetup :1; DWORD m_fPlay :1; DWORD m_fStop :1; DWORD m_fWaitRecv :1; DWORD m_fWaitPlay :1; DWORD m_fWaitStop :1; DWORD m_fHasDescribe:1; DWORD m_sSeq :16; }; DWORD m_dwFlags; };
我們按照順次設置標誌位的方法控制通信,其中最終協議發送類型受到m_fHasDescribe、m_fWaitPlay、m_fWaitStop的干涉:
CSingleLock sl(&m_csFlags, true); if (!m_fOptions) { m_dwCmdType = REQUEST_OPTIONS; } else if (!m_fHasDescribe || !m_fDescribe && m_fWaitPlay) { m_dwCmdType = REQUEST_DESCRIBE; } else if (m_fWaitStop) { if (m_fPlay) { m_dwCmdType = REQUEST_TEARDOWN; } } else if (m_fWaitPlay) { if (!m_fSetup) { m_dwCmdType = REQUEST_SETUP; } else if (!m_fPlay) { m_dwCmdType = REQUEST_PLAY; } } sl.Unlock();