标志位的设置如下:
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();