|
|
// File: confroom.h
#ifndef _CONFROOM_H_
#define _CONFROOM_H_
#include <ias.h>
#include "MRUList.h"
#include "AudioCtl.h"
#include "ConfUtil.h"
#include "callto.h"
class CTopWindow; class CMainUI; class CSeparator; class CRoomListView; class CConfStatusBar; class CPopupMsg; class CFloatToolbar; class CVideoWindow; class CParticipant; class CComponentWnd; class CAudioControl; class CCall;
struct IComponentWnd; struct IConferenceLink; struct TOOLSMENUSTRUCT; struct MYOWNERDRAWSTRUCT; struct RichAddressInfo;
interface IEnumRichAddressInfo;
interface IConferenceChangeHandler : public IUnknown {
public: virtual void OnCallStarted() = 0; virtual void OnCallEnded() = 0;
virtual void OnAudioLevelChange(BOOL fSpeaker, DWORD dwVolume) = 0; virtual void OnAudioMuteChange(BOOL fSpeaker, BOOL fMute) = 0;
virtual void OnChangeParticipant(CParticipant *pPart, NM_MEMBER_NOTIFY uNotify) = 0;
virtual void OnChangePermissions() = 0;
virtual void OnVideoChannelChanged(NM_CHANNEL_NOTIFY uNotify, INmChannel *pChannel) = 0; } ;
class CConfRoom : RefCount, INmConferenceNotify2, IAppSharingNotify, IAudioEvent { friend class CNetMeetingObj; friend bool IsSpeakerMuted(); friend bool IsMicMuted(); friend void MuteSpeaker(BOOL fMute); friend void MuteMicrophone(BOOL fMute); friend DWORD GetRecorderVolume(); friend DWORD GetSpeakerVolume(); friend void SetRecorderVolume(DWORD dw); friend void SetSpeakerVolume(DWORD dw); friend CVideoWindow* GetLocalVideo(); friend CVideoWindow* GetRemoteVideo();
private: CTopWindow * m_pTopWindow; CSimpleArray<CParticipant*> m_PartList; // CParticipant list
CCopyableArray<IConferenceChangeHandler*> m_CallHandlerList; CParticipant * m_pPartLocal; UINT m_cParticipants;
DWORD m_dwConfCookie; INmConference2 * m_pInternalNmConference; CAudioControl * m_pAudioControl; IAppSharing * m_pAS; NM30_MTG_PERMISSIONS m_settings; // Settings for the meeting
NM30_MTG_PERMISSIONS m_attendeePermissions; // Everybody BUT host
BOOL m_fTopProvider : 1; // TRUE if we're the top provider
BOOL m_fGetPermissions : 1;
BOOL LeaveConference(void);
VOID SaveSettings(); // handlers:
VOID OnCallStarted(); VOID OnCallEnded();
void OnChangeParticipant(CParticipant *pPart, NM_MEMBER_NOTIFY uNotify); void OnChangePermissions();
BOOL OnPersonJoined(INmMember * pMember); BOOL OnPersonLeft(INmMember * pMember); VOID OnPersonChanged(INmMember * pMember);
VOID CheckTopProvider(void); DWORD GetCallFlags();
public: CConfRoom(); ~CConfRoom();
// IUnknown methods:
//
STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); STDMETHODIMP QueryInterface(REFIID riid, PVOID *ppvObj);
//
// INmConferenceNotify2 methods:
//
STDMETHODIMP NmUI(CONFN uNotify); STDMETHODIMP StateChanged(NM_CONFERENCE_STATE uState); STDMETHODIMP MemberChanged(NM_MEMBER_NOTIFY uNotify, INmMember *pMember); STDMETHODIMP ChannelChanged(NM_CHANNEL_NOTIFY uNotify, INmChannel *pChannel); STDMETHODIMP StreamEvent(NM_STREAMEVENT uEvent, UINT uSubCode,INmChannel __RPC_FAR *pChannel);
STDMETHODIMP OnConferenceCreated(INmConference *pConference);
//
// IAppSharingNotify methods
//
STDMETHODIMP OnReadyToShare(BOOL fReady); STDMETHODIMP OnShareStarted(void); STDMETHODIMP OnSharingStarted(void); STDMETHODIMP OnShareEnded(void); STDMETHODIMP OnPersonJoined(IAS_GCC_ID gccMemberID); STDMETHODIMP OnPersonLeft(IAS_GCC_ID gccMemberID); STDMETHODIMP OnStartInControl(IAS_GCC_ID gccOfMemberID); STDMETHODIMP OnStopInControl(IAS_GCC_ID gccOfMemberID); STDMETHODIMP OnPausedInControl(IAS_GCC_ID gccOfMemberID); STDMETHODIMP OnUnpausedInControl(IAS_GCC_ID gccOfMemberID); STDMETHODIMP OnControllable(BOOL fControllable); STDMETHODIMP OnStartControlled(IAS_GCC_ID gccByMemberID); STDMETHODIMP OnStopControlled(IAS_GCC_ID gccByMemberID); STDMETHODIMP OnPausedControlled(IAS_GCC_ID gccByMemberID); STDMETHODIMP OnUnpausedControlled(IAS_GCC_ID gccByMemberID);
virtual void OnLevelChange(BOOL fSpeaker, DWORD dwVolume); virtual void OnMuteChange(BOOL fSpeaker, BOOL fMute);
// end IGenWindow interface
// Public methods:
BOOL Init(); HWND Create(BOOL fShowUI); VOID CleanUp(); BOOL BringToFront(); VOID UpdateUI(DWORD dwUIMask); VOID ForceWindowResize();
BOOL FIsClosing();
CTopWindow * GetTopWindow() { return m_pTopWindow; } HWND GetTopHwnd(); HPALETTE GetPalette();
CSimpleArray<CParticipant*>& GetParticipantList() { return m_PartList; }
DWORD GetMeetingPermissions(void) { return m_attendeePermissions; } DWORD GetMeetingSettings(void) { return m_settings; } void CmdShowFileTransfer(void); void CmdShowSharing(void); void CmdShowMeetingSettings(HWND hwnd);
HRESULT FreeAddress(RichAddressInfo **ppAddr); HRESULT CopyAddress(RichAddressInfo *pAddrIn, RichAddressInfo **ppAddrOut);
HRESULT ResolveAndCall ( const HWND parentWindow, const TCHAR * const displayName, const RichAddressInfo * const rai, const bool secure );
HRESULT GetRecentAddresses(IEnumRichAddressInfo **ppEnum);
CVideoWindow* GetLocalVideo(); CVideoWindow* GetRemoteVideo(); CAudioControl* GetAudioControl() { return(m_pAudioControl); }
BOOL FIsConferenceActive(void) { return NULL != GetActiveConference(); } INmConference2* GetActiveConference(void); INmConference2* GetConference() { return m_pInternalNmConference; } DWORD GetConferenceStatus(LPTSTR pszStatus, int cchMax, UINT * puID); HRESULT HostConference(LPCTSTR pcszName, LPCTSTR pcszPassword, BOOL fSecure, DWORD permitFlags, UINT maxParticipants);
void OnCommand(HWND hwnd, int wCommand, HWND hwndCtl, UINT codeNotify);
HRESULT GetSelectedAddress(LPTSTR pszAddress, UINT cchAddress, LPTSTR pszEmail=NULL, UINT cchEmail=0, LPTSTR pszName=NULL, UINT cchName=0);
// Application Sharing Functions
BOOL FCanShare(); BOOL FIsSharingAvailable(); void LaunchHostUI(void); BOOL FInShare(); BOOL FIsSharing(); BOOL FIsControllable(); HRESULT GetPersonShareStatus(UINT gcc, IAS_PERSON_STATUS * pas); HRESULT AllowControl(BOOL fAllow); HRESULT RevokeControl(UINT gccTo); HRESULT GiveControl(UINT gccTo); HRESULT CancelGiveControl(UINT gccTo);
// the following methods are used by scrapi only
HRESULT CmdShare(HWND hwnd); HRESULT CmdUnshare(HWND hwnd); BOOL FIsWindowShareable(HWND hwnd); BOOL FIsWindowShared(HWND hwnd); HRESULT GetShareableApps(IAS_HWND_ARRAY** ppList); HRESULT FreeShareableApps(IAS_HWND_ARRAY* pList);
// Audio Functions
VOID SetSpeakerVolume(DWORD dwLevel); VOID SetRecorderVolume(DWORD dwLevel); VOID MuteSpeaker(BOOL fMute); VOID MuteMicrophone(BOOL fMute);
VOID OnAudioDeviceChanged(); VOID OnAGC_Changed(); VOID OnSilenceLevelChanged();
// Member Functions
CParticipant * GetH323Remote(void); CParticipant * ParticipantFromINmMember(INmMember * pMember); CParticipant * GetLocalParticipant() {return m_pPartLocal;} BOOL FTopProvider() {return m_fTopProvider;}
VOID AddConferenceChangeHandler(IConferenceChangeHandler *pch); VOID RemoveConferenceChangeHandler(IConferenceChangeHandler *pch);
IAppSharing *GetAppSharing() { return(m_pAS); }
BOOL CanCloseChat(HWND hwndMain); BOOL CanCloseWhiteboard(HWND hwndMain); BOOL CanCloseFileTransfer(HWND hwndMain);
void ToggleLdapLogon();
// Stuff needed by CTopWindow
UINT GetMemberCount(void) { return m_cParticipants; } BOOL OnHangup(HWND hwndParent, BOOL fNeedConfirm=TRUE); BOOL FHasChildNodes(void); VOID TerminateAppSharing(void); VOID FreePartList(void); VOID StartAppSharing(void);
BOOL IsSharingAllowed(); BOOL IsNewWhiteboardAllowed(); BOOL IsOldWhiteboardAllowed(); BOOL IsChatAllowed(); BOOL IsFileTransferAllowed(); BOOL IsNewCallAllowed();
static HRESULT HangUp(BOOL bUserPrompt = TRUE);
// Global UI shutdown handler:
static VOID UIEndSession(BOOL fLogoff);
static void get_securitySettings ( bool & userAlterable, bool & secure ); };
HRESULT ShareWindow(HWND hWnd); HRESULT UnShareWindow(HWND hWnd); HRESULT GetWindowState(NM_SHAPP_STATE* pState, HWND hWnd);
BOOL AllowingControl();
HRESULT GetShareableApps(IAS_HWND_ARRAY** ppList); HRESULT FreeShareableApps(IAS_HWND_ARRAY * pList);
// Global utility functions
BOOL FTopProvider(void); BOOL FRejectIncomingCalls(void); BOOL FIsConfRoomClosing(void);
extern CConfRoom * g_pConfRoom; inline CConfRoom * GetConfRoom(void) {return g_pConfRoom; } inline CTopWindow * GetTopWindow(void) { return(NULL == g_pConfRoom ? NULL : g_pConfRoom->GetTopWindow()); }
HRESULT GetShareState(ULONG ulGCCId, NM_SHARE_STATE *puState);
BOOL ConfRoomInit(HANDLE hInstance); BOOL CreateConfRoomWindow(BOOL fShowUI = TRUE);
DWORD MapNmAddrTypeToNameType(NM_ADDR_TYPE addrType); HRESULT AllowControl(bool bAllowControl); HRESULT RevokeControl(UINT gccID); bool IsSpeakerMuted(); bool IsMicMuted(); DWORD GetRecorderVolume(); DWORD GetSpeakerVolume();
BOOL CmdShowNewWhiteboard(LPCTSTR szFile); BOOL CmdShowOldWhiteboard(LPCTSTR szFile); VOID CmdShowChat(void);
void PauseLocalVideo(BOOL fPause); void PauseRemoteVideo(BOOL fPause); BOOL IsLocalVideoPaused(); BOOL IsRemoteVideoPaused(); HRESULT GetRemoteVideoState(NM_VIDEO_STATE *puState); HRESULT GetLocalVideoState(NM_VIDEO_STATE *puState); HRESULT GetImageQuality(ULONG* pul, BOOL bIncoming); HRESULT SetImageQuality(ULONG ul, BOOL bIncoming); HRESULT SetCameraDialog(ULONG ul); HRESULT GetCameraDialog(ULONG* pul);
#endif // _CONFROOM_H_
|