summaryrefslogtreecommitdiff
path: root/utils/smp/CWMPEventDispatch.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /utils/smp/CWMPEventDispatch.cpp
downloadarchived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.tar.xz
archived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.zip
Diffstat (limited to 'utils/smp/CWMPEventDispatch.cpp')
-rw-r--r--utils/smp/CWMPEventDispatch.cpp584
1 files changed, 584 insertions, 0 deletions
diff --git a/utils/smp/CWMPEventDispatch.cpp b/utils/smp/CWMPEventDispatch.cpp
new file mode 100644
index 0000000..a49f042
--- /dev/null
+++ b/utils/smp/CWMPEventDispatch.cpp
@@ -0,0 +1,584 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+// CWMPEventDispatch.cpp : Implementation of the event dispatcher
+//
+
+#include "CWMPEventDispatch.h"
+#include "CWMPHost.h"
+
+extern HWND g_hBlackFadingWindow;
+extern CComPtr<IWMPPlayer> g_spWMPPlayer;
+extern CWMPHost* g_pFrame;
+extern double g_timeAtFadeStart;
+extern bool g_bFadeIn;
+
+bool g_bFadeWindowTriggered = false;
+
+
+bool IsFullScreen();
+bool SetFullScreen( bool bWantToBeFullscreen );
+bool IsVideoPlaying();
+void PlayVideo( bool bPlay );
+bool ShowFadeWindow( bool bShow );
+void LogPlayerEvent( EventType_t e, float pos );
+void LogPlayerEvent( EventType_t e );
+
+
+HRESULT CWMPEventDispatch::Invoke(
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS FAR* pDispParams,
+ VARIANT FAR* pVarResult,
+ EXCEPINFO FAR* pExcepInfo,
+ unsigned int FAR* puArgErr )
+{
+ if (!pDispParams)
+ return E_POINTER;
+
+ if (pDispParams->cNamedArgs != 0)
+ return DISP_E_NONAMEDARGS;
+
+ HRESULT hr = DISP_E_MEMBERNOTFOUND;
+
+ switch (dispIdMember)
+ {
+ case DISPID_WMPCOREEVENT_OPENSTATECHANGE:
+ OpenStateChange(pDispParams->rgvarg[0].lVal /* NewState */ );
+ break;
+
+ case DISPID_WMPCOREEVENT_PLAYSTATECHANGE:
+ PlayStateChange(pDispParams->rgvarg[0].lVal /* NewState */);
+ break;
+
+ case DISPID_WMPCOREEVENT_AUDIOLANGUAGECHANGE:
+ AudioLanguageChange(pDispParams->rgvarg[0].lVal /* LangID */);
+ break;
+
+ case DISPID_WMPCOREEVENT_STATUSCHANGE:
+ StatusChange();
+ break;
+
+ case DISPID_WMPCOREEVENT_SCRIPTCOMMAND:
+ ScriptCommand(pDispParams->rgvarg[1].bstrVal /* scType */, pDispParams->rgvarg[0].bstrVal /* Param */ );
+ break;
+
+ case DISPID_WMPCOREEVENT_NEWSTREAM:
+ NewStream();
+ break;
+
+ case DISPID_WMPCOREEVENT_DISCONNECT:
+ Disconnect(pDispParams->rgvarg[0].lVal /* Result */ );
+ break;
+
+ case DISPID_WMPCOREEVENT_BUFFERING:
+ Buffering(pDispParams->rgvarg[0].boolVal /* Start */);
+ break;
+
+ case DISPID_WMPCOREEVENT_ERROR:
+ Error();
+ break;
+
+ case DISPID_WMPCOREEVENT_WARNING:
+ Warning(pDispParams->rgvarg[1].lVal /* WarningType */, pDispParams->rgvarg[0].lVal /* Param */, pDispParams->rgvarg[2].bstrVal /* Description */);
+ break;
+
+ case DISPID_WMPCOREEVENT_ENDOFSTREAM:
+ EndOfStream(pDispParams->rgvarg[0].lVal /* Result */ );
+ break;
+
+ case DISPID_WMPCOREEVENT_POSITIONCHANGE:
+ PositionChange(pDispParams->rgvarg[1].dblVal /* oldPosition */, pDispParams->rgvarg[0].dblVal /* newPosition */);
+ break;
+
+ case DISPID_WMPCOREEVENT_MARKERHIT:
+ MarkerHit(pDispParams->rgvarg[0].lVal /* MarkerNum */);
+ break;
+
+ case DISPID_WMPCOREEVENT_DURATIONUNITCHANGE:
+ DurationUnitChange(pDispParams->rgvarg[0].lVal /* NewDurationUnit */);
+ break;
+
+ case DISPID_WMPCOREEVENT_CDROMMEDIACHANGE:
+ CdromMediaChange(pDispParams->rgvarg[0].lVal /* CdromNum */);
+ break;
+
+ case DISPID_WMPCOREEVENT_PLAYLISTCHANGE:
+ PlaylistChange(pDispParams->rgvarg[1].pdispVal /* Playlist */, (WMPPlaylistChangeEventType) pDispParams->rgvarg[0].lVal /* change */);
+ break;
+
+ case DISPID_WMPCOREEVENT_CURRENTPLAYLISTCHANGE:
+ CurrentPlaylistChange((WMPPlaylistChangeEventType) pDispParams->rgvarg[0].lVal /* change */);
+ break;
+
+ case DISPID_WMPCOREEVENT_CURRENTPLAYLISTITEMAVAILABLE:
+ CurrentPlaylistItemAvailable(pDispParams->rgvarg[0].bstrVal /* bstrItemName */);
+ break;
+
+ case DISPID_WMPCOREEVENT_MEDIACHANGE:
+ MediaChange(pDispParams->rgvarg[0].pdispVal /* Item */);
+ break;
+
+ case DISPID_WMPCOREEVENT_CURRENTMEDIAITEMAVAILABLE:
+ CurrentMediaItemAvailable(pDispParams->rgvarg[0].bstrVal /* bstrItemName */);
+ break;
+
+ case DISPID_WMPCOREEVENT_CURRENTITEMCHANGE:
+ CurrentItemChange(pDispParams->rgvarg[0].pdispVal /* pdispMedia */);
+ break;
+
+ case DISPID_WMPCOREEVENT_MEDIACOLLECTIONCHANGE:
+ MediaCollectionChange();
+ break;
+
+ case DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGADDED:
+ MediaCollectionAttributeStringAdded(pDispParams->rgvarg[1].bstrVal /* bstrAttribName */, pDispParams->rgvarg[0].bstrVal /* bstrAttribVal */ );
+ break;
+
+ case DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGREMOVED:
+ MediaCollectionAttributeStringRemoved(pDispParams->rgvarg[1].bstrVal /* bstrAttribName */, pDispParams->rgvarg[0].bstrVal /* bstrAttribVal */ );
+ break;
+
+ case DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGCHANGED:
+ MediaCollectionAttributeStringChanged(pDispParams->rgvarg[2].bstrVal /* bstrAttribName */, pDispParams->rgvarg[1].bstrVal /* bstrOldAttribVal */, pDispParams->rgvarg[0].bstrVal /* bstrNewAttribVal */);
+ break;
+
+ case DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONCHANGE:
+ PlaylistCollectionChange();
+ break;
+
+ case DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTADDED:
+ PlaylistCollectionPlaylistAdded(pDispParams->rgvarg[0].bstrVal /* bstrPlaylistName */ );
+ break;
+
+ case DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTREMOVED:
+ PlaylistCollectionPlaylistRemoved(pDispParams->rgvarg[0].bstrVal /* bstrPlaylistName */ );
+ break;
+
+ case DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTSETASDELETED:
+ PlaylistCollectionPlaylistSetAsDeleted(pDispParams->rgvarg[1].bstrVal /* bstrPlaylistName */, pDispParams->rgvarg[0].boolVal /* varfIsDeleted */);
+ break;
+
+ case DISPID_WMPCOREEVENT_MODECHANGE:
+ ModeChange(pDispParams->rgvarg[1].bstrVal /* ModeName */, pDispParams->rgvarg[0].boolVal /* NewValue */);
+ break;
+
+ case DISPID_WMPCOREEVENT_MEDIAERROR:
+ MediaError(pDispParams->rgvarg[0].pdispVal /* pMediaObject */);
+ break;
+
+ case DISPID_WMPCOREEVENT_OPENPLAYLISTSWITCH:
+ OpenPlaylistSwitch(pDispParams->rgvarg[0].pdispVal /* pItem */);
+ break;
+
+ case DISPID_WMPCOREEVENT_DOMAINCHANGE:
+ DomainChange(pDispParams->rgvarg[0].bstrVal /* strDomain */);
+ break;
+
+ case DISPID_WMPOCXEVENT_SWITCHEDTOPLAYERAPPLICATION:
+ SwitchedToPlayerApplication();
+ break;
+
+ case DISPID_WMPOCXEVENT_SWITCHEDTOCONTROL:
+ SwitchedToControl();
+ break;
+
+ case DISPID_WMPOCXEVENT_PLAYERDOCKEDSTATECHANGE:
+ PlayerDockedStateChange();
+ break;
+
+ case DISPID_WMPOCXEVENT_PLAYERRECONNECT:
+ PlayerReconnect();
+ break;
+
+ case DISPID_WMPOCXEVENT_CLICK:
+ Click(pDispParams->rgvarg[3].iVal /* nButton */, pDispParams->rgvarg[2].iVal /* nShiftState */, pDispParams->rgvarg[1].lVal /* fX */, pDispParams->rgvarg[0].lVal /* fY */);
+ break;
+
+ case DISPID_WMPOCXEVENT_DOUBLECLICK:
+ DoubleClick(pDispParams->rgvarg[3].iVal /* nButton */, pDispParams->rgvarg[2].iVal /* nShiftState */, pDispParams->rgvarg[1].lVal /* fX */, pDispParams->rgvarg[0].lVal /* fY */);
+ break;
+
+ case DISPID_WMPOCXEVENT_KEYDOWN:
+ KeyDown(pDispParams->rgvarg[1].iVal /* nKeyCode */, pDispParams->rgvarg[0].iVal /* nShiftState */);
+ break;
+
+ case DISPID_WMPOCXEVENT_KEYPRESS:
+ KeyPress(pDispParams->rgvarg[0].iVal /* nKeyAscii */);
+ break;
+
+ case DISPID_WMPOCXEVENT_KEYUP:
+ KeyUp(pDispParams->rgvarg[1].iVal /* nKeyCode */, pDispParams->rgvarg[0].iVal /* nShiftState */);
+ break;
+
+ case DISPID_WMPOCXEVENT_MOUSEDOWN:
+ MouseDown(pDispParams->rgvarg[3].iVal /* nButton */, pDispParams->rgvarg[2].iVal /* nShiftState */, pDispParams->rgvarg[1].lVal /* fX */, pDispParams->rgvarg[0].lVal /* fY */);
+ break;
+
+ case DISPID_WMPOCXEVENT_MOUSEMOVE:
+ MouseMove(pDispParams->rgvarg[3].iVal /* nButton */, pDispParams->rgvarg[2].iVal /* nShiftState */, pDispParams->rgvarg[1].lVal /* fX */, pDispParams->rgvarg[0].lVal /* fY */);
+ break;
+
+ case DISPID_WMPOCXEVENT_MOUSEUP:
+ MouseUp(pDispParams->rgvarg[3].iVal /* nButton */, pDispParams->rgvarg[2].iVal /* nShiftState */, pDispParams->rgvarg[1].lVal /* fX */, pDispParams->rgvarg[0].lVal /* fY */);
+ break;
+ }
+
+ return( hr );
+}
+
+// Sent when the control changes OpenState
+void CWMPEventDispatch::OpenStateChange(long NewState)
+{
+ return;
+}
+
+// Sent when the control changes PlayState
+void CWMPEventDispatch::PlayStateChange(long NewState)
+{
+ WMPPlayState playstate;
+ if ( g_spWMPPlayer->get_playState( &playstate ) == S_OK )
+ {
+ switch ( playstate )
+ {
+ case wmppsPlaying:
+ {
+ static bool s_first = true;
+ if ( s_first )
+ {
+ s_first = false;
+
+ LogPlayerEvent( ET_MEDIABEGIN );
+
+ SetFullScreen( true );
+ ShowFadeWindow( false );
+ }
+ else
+ {
+ LogPlayerEvent( ET_PLAY );
+ }
+ break;
+ }
+
+ case wmppsPaused:
+ LogPlayerEvent( ET_PAUSE );
+ break;
+
+ case wmppsStopped:
+ LogPlayerEvent( ET_STOP );
+ break;
+
+ case wmppsMediaEnded:
+ LogPlayerEvent( ET_MEDIAEND );
+
+ if ( IsFullScreen() && !g_bFadeWindowTriggered )
+ {
+ g_bFadeWindowTriggered = true;
+ ShowFadeWindow( true );
+ }
+ break;
+ }
+ }
+}
+
+// Sent when the audio language changes
+void CWMPEventDispatch::AudioLanguageChange(long LangID)
+{
+ return;
+}
+
+// Sent when the status string changes
+void CWMPEventDispatch::StatusChange()
+{
+}
+
+// Sent when a synchronized command or URL is received
+void CWMPEventDispatch::ScriptCommand(BSTR scType,BSTR Param)
+{
+ return;
+}
+
+// Sent when a new stream is encountered (obsolete)
+void CWMPEventDispatch::NewStream()
+{
+ return;
+}
+
+// Sent when the control is disconnected from the server (obsolete)
+void CWMPEventDispatch:: Disconnect(long Result )
+{
+ return;
+}
+
+// Sent when the control begins or ends buffering
+void CWMPEventDispatch:: Buffering(VARIANT_BOOL Start)
+{
+ return;
+}
+
+// Sent when the control has an error condition
+void CWMPEventDispatch::Error()
+{
+ return;
+}
+
+// Sent when the control has an warning condition (obsolete)
+void CWMPEventDispatch::Warning(long WarningType, long Param, BSTR Description)
+{
+ return;
+}
+
+// Sent when the media has reached end of stream
+void CWMPEventDispatch::EndOfStream(long Result)
+{
+ return;
+}
+
+// Indicates that the current position of the movie has changed
+void CWMPEventDispatch::PositionChange(double oldPosition,double newPosition)
+{
+ LogPlayerEvent( ET_SCRUBFROM, ( float )oldPosition );
+ LogPlayerEvent( ET_SCRUBTO, ( float )newPosition );
+}
+
+// Sent when a marker is reached
+void CWMPEventDispatch::MarkerHit(long MarkerNum )
+{
+ return;
+}
+
+// Indicates that the unit used to express duration and position has changed
+void CWMPEventDispatch::DurationUnitChange(long NewDurationUnit)
+{
+ return;
+}
+
+// Indicates that the CD ROM media has changed
+void CWMPEventDispatch::CdromMediaChange(long CdromNum)
+{
+ return;
+}
+
+// Sent when a playlist changes
+void CWMPEventDispatch::PlaylistChange(IDispatch * Playlist,WMPPlaylistChangeEventType change)
+{
+ return;
+}
+
+// Sent when the current playlist changes
+void CWMPEventDispatch::CurrentPlaylistChange(WMPPlaylistChangeEventType change )
+{
+ return;
+}
+
+// Sent when a current playlist item becomes available
+void CWMPEventDispatch::CurrentPlaylistItemAvailable(BSTR bstrItemName)
+{
+ return;
+}
+
+// Sent when a media object changes
+void CWMPEventDispatch::MediaChange(IDispatch * Item)
+{
+ return;
+}
+
+// Sent when a current media item becomes available
+void CWMPEventDispatch::CurrentMediaItemAvailable(BSTR bstrItemName)
+{
+ return;
+}
+
+// Sent when the item selection on the current playlist changes
+void CWMPEventDispatch::CurrentItemChange(IDispatch *pdispMedia)
+{
+ return;
+}
+
+// Sent when the media collection needs to be requeried
+void CWMPEventDispatch::MediaCollectionChange()
+{
+ return;
+}
+
+// Sent when an attribute string is added in the media collection
+void CWMPEventDispatch::MediaCollectionAttributeStringAdded(BSTR bstrAttribName, BSTR bstrAttribVal)
+{
+ return;
+}
+
+// Sent when an attribute string is removed from the media collection
+void CWMPEventDispatch::MediaCollectionAttributeStringRemoved(BSTR bstrAttribName, BSTR bstrAttribVal)
+{
+ return;
+}
+
+// Sent when an attribute string is changed in the media collection
+void CWMPEventDispatch::MediaCollectionAttributeStringChanged(BSTR bstrAttribName, BSTR bstrOldAttribVal, BSTR bstrNewAttribVal)
+{
+ return;
+}
+
+// Sent when playlist collection needs to be requeried
+void CWMPEventDispatch::PlaylistCollectionChange()
+{
+ return;
+}
+
+// Sent when a playlist is added to the playlist collection
+void CWMPEventDispatch::PlaylistCollectionPlaylistAdded(BSTR bstrPlaylistName)
+{
+ return;
+}
+
+// Sent when a playlist is removed from the playlist collection
+void CWMPEventDispatch::PlaylistCollectionPlaylistRemoved(BSTR bstrPlaylistName)
+{
+ return;
+}
+
+// Sent when a playlist has been set or reset as deleted
+void CWMPEventDispatch::PlaylistCollectionPlaylistSetAsDeleted(BSTR bstrPlaylistName, VARIANT_BOOL varfIsDeleted)
+{
+ return;
+}
+
+// Playlist playback mode has changed
+void CWMPEventDispatch::ModeChange(BSTR ModeName, VARIANT_BOOL NewValue)
+{
+ return;
+}
+
+// Sent when the media object has an error condition
+void CWMPEventDispatch::MediaError(IDispatch * pMediaObject)
+{
+ while ( ShowCursor( TRUE ) < 0 )
+ ;
+
+ ShowWindow( g_hBlackFadingWindow, SW_HIDE );
+ if ( g_pFrame )
+ {
+ g_pFrame->ShowWindow( SW_HIDE );
+ }
+
+ CComPtr< IWMPMedia > spWMPMedia;
+ if ( pMediaObject )
+ {
+ pMediaObject->QueryInterface( &spWMPMedia );
+ }
+ if ( spWMPMedia )
+ {
+ BSTR bstr;
+ spWMPMedia->get_sourceURL( &bstr );
+ char str[ 1024 ];
+ sprintf( str, "Unable to open media: %s\n", CW2T( bstr ) );
+ MessageBox( NULL, str, "Media Error", MB_OK | MB_ICONERROR );
+ }
+ else
+ {
+ MessageBox( NULL, "Media Error", "Media Error", MB_OK | MB_ICONERROR );
+ }
+
+ g_pFrame->PostMessage( WM_CLOSE );
+}
+
+// Current playlist switch with no open state change
+void CWMPEventDispatch::OpenPlaylistSwitch(IDispatch *pItem)
+{
+ return;
+}
+
+// Sent when the current DVD domain changes
+void CWMPEventDispatch::DomainChange(BSTR strDomain)
+{
+ return;
+}
+
+// Sent when display switches to player application
+void CWMPEventDispatch::SwitchedToPlayerApplication()
+{
+}
+
+// Sent when display switches to control
+void CWMPEventDispatch::SwitchedToControl()
+{
+}
+
+// Sent when the player docks or undocks
+void CWMPEventDispatch::PlayerDockedStateChange()
+{
+}
+
+// Sent when the OCX reconnects to the player
+void CWMPEventDispatch::PlayerReconnect()
+{
+}
+
+// Occurs when a user clicks the mouse
+void CWMPEventDispatch::Click( short nButton, short nShiftState, long fX, long fY )
+{
+ if ( IsFullScreen() )
+ {
+ SetFullScreen( false );
+ }
+}
+
+// Occurs when a user double-clicks the mouse
+void CWMPEventDispatch::DoubleClick( short nButton, short nShiftState, long fX, long fY )
+{
+ // the controls are just drawn into the main window, wheras the video has its own window
+ // this check allows us to only fullscreen on doubleclick within the video area
+ POINT pt = { fX, fY };
+ HWND hWnd = g_pFrame->ChildWindowFromPoint( pt );
+ if ( ChildWindowFromPoint( hWnd, pt ) != hWnd )
+ {
+ SetFullScreen( !IsFullScreen() );
+ }
+}
+
+// Occurs when a key is pressed
+void CWMPEventDispatch::KeyDown( short nKeyCode, short nShiftState )
+{
+#if 1
+ if ( !g_pFrame )
+ return;
+
+ BOOL rval;
+ if ( nShiftState & 4 ) // 4 is the alt keymask
+ {
+ g_pFrame->OnSysKeyDown( WM_KEYDOWN, nKeyCode, 0, rval );
+ }
+ else
+ {
+ g_pFrame->OnKeyDown( WM_KEYDOWN, nKeyCode, 0, rval );
+ }
+#endif
+}
+
+// Occurs when a key is pressed and released
+void CWMPEventDispatch::KeyPress( short nKeyAscii )
+{
+ return;
+}
+
+// Occurs when a key is released
+void CWMPEventDispatch::KeyUp( short nKeyCode, short nShiftState )
+{
+ return;
+}
+
+// Occurs when a mouse button is pressed
+void CWMPEventDispatch::MouseDown( short nButton, short nShiftState, long fX, long fY )
+{
+}
+
+// Occurs when a mouse pointer is moved
+void CWMPEventDispatch::MouseMove( short nButton, short nShiftState, long fX, long fY )
+{
+ return;
+}
+
+// Occurs when a mouse button is released
+void CWMPEventDispatch::MouseUp( short nButton, short nShiftState, long fX, long fY )
+{
+}