summaryrefslogtreecommitdiffstats
path: root/private/oleutest/balls/srv/testsrv/csrvapp.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'private/oleutest/balls/srv/testsrv/csrvapp.cxx')
-rw-r--r--private/oleutest/balls/srv/testsrv/csrvapp.cxx289
1 files changed, 289 insertions, 0 deletions
diff --git a/private/oleutest/balls/srv/testsrv/csrvapp.cxx b/private/oleutest/balls/srv/testsrv/csrvapp.cxx
new file mode 100644
index 000000000..bf3a91189
--- /dev/null
+++ b/private/oleutest/balls/srv/testsrv/csrvapp.cxx
@@ -0,0 +1,289 @@
+//+-------------------------------------------------------------------
+// File: csrvapp.cxx
+//
+// Contents: Implementation of CTestServerApp
+//
+// Classes: CTestServerApp
+//
+// History: 17-Dec-92 DeanE Created
+//---------------------------------------------------------------------
+#pragma optimize("",off)
+#include <common.h>
+#include <csrvapp.hxx>
+#include <except.hxx>
+#include <embed.hxx>
+
+void ProcessCmdLine(LPSTR, BOOL *);
+
+// Used to send a quit message
+extern HWND g_hwndMain;
+
+extern "C" const GUID CLSID_TestEmbed;
+
+
+//+--------------------------------------------------------------
+// Function: CTestServerApp::CTestServerApp
+//
+// Synopsis: Constructor - initialize members
+//
+// Parameters: None
+//
+// Returns: None
+//
+// History: 17-Dec-92 DeanE Created
+//---------------------------------------------------------------
+CTestServerApp::CTestServerApp()
+{
+ _pteClassFactory = NULL;
+ _dwRegId = 0;
+ _fRegistered = FALSE;
+ _fInitialized = FALSE;
+ _fEmbedded = TRUE;
+ _cEmbeddedObjs = 0;
+}
+
+
+//+--------------------------------------------------------------
+// Function: CTestServerApp::~CTestServerApp
+//
+// Synopsis: Insure pointers are free - note this is mainly for
+// error-checking.
+//
+// Parameters: None
+//
+// Returns: None
+//
+// History: 17-Dec-92 DeanE Created
+//---------------------------------------------------------------
+CTestServerApp::~CTestServerApp()
+{
+ delete _pteClassFactory;
+}
+
+
+//+--------------------------------------------------------------
+// Function: CTestServerApp::InitApp
+//
+// Synopsis: Initialize this instance of the app.
+//
+// Parameters: [lpszCmdline] - Command line of the application.
+//
+// Returns: S_OK if everything was initialized, or an error if not.
+//
+// History: 17-Dec-92 DeanE Created
+//
+// Notes: If this does not return, the CloseApp method should
+// still be called for proper cleanup.
+//---------------------------------------------------------------
+SCODE CTestServerApp::InitApp(LPSTR lpszCmdline)
+{
+ SCODE sc;
+
+ // Check OLE version running
+ // BUGBUG - NYI by OLE
+ // Bail out if we are not running with an acceptable version of OLE
+
+ // Process Command Line arguments
+ ProcessCmdLine(lpszCmdline, &_fEmbedded);
+
+ // Initialize OLE
+ // Look up the thread mode from the win.ini file.
+ DWORD thread_mode;
+ TCHAR buffer[80];
+ int len;
+
+ len = GetProfileString( TEXT("TestSrv"),
+ TEXT("ThreadMode"),
+ TEXT("MultiThreaded"),
+ buffer,
+ sizeof(buffer) / sizeof(TCHAR));
+
+ if (lstrcmp(buffer, TEXT("ApartmentThreaded")) == 0)
+ {
+ thread_mode = COINIT_APARTMENTTHREADED;
+ sc = CoInitialize(NULL);
+ }
+ else
+ {
+#ifdef THREADING_SUPPORT
+ thread_mode = COINIT_MULTITHREADED;
+ sc = CoInitializeEx(NULL, thread_mode);
+#else
+ // multi-threading not supported
+ sc = E_INVALIDARG;
+#endif
+ }
+
+ if (S_OK == sc)
+ {
+ _fInitialized = TRUE;
+ }
+ else
+ {
+ return(sc);
+ }
+
+ // Create the applications class factory - note that we have to free
+ // at a later time
+ _pteClassFactory = CTestEmbedCF::Create(this);
+ if (NULL == _pteClassFactory)
+ {
+ return(E_ABORT);
+ }
+
+ // Register the class with OLE
+ sc = CoRegisterClassObject(
+ CLSID_TestEmbed,
+ _pteClassFactory,
+ CLSCTX_LOCAL_SERVER,
+ REGCLS_MULTIPLEUSE,
+ &_dwRegId);
+ if (S_OK == sc)
+ {
+ _fRegistered = TRUE;
+ }
+
+ return(sc);
+}
+
+
+//+--------------------------------------------------------------
+// Function: CTestServerApp::CloseApp
+//
+// Synopsis: Clean up resources this instance of the app is using.
+//
+// Parameters: None
+//
+// Returns: S_OK if everything was cleaned up, or an error if not.
+//
+// History: 17-Dec-92 DeanE Created
+//---------------------------------------------------------------
+SCODE CTestServerApp::CloseApp()
+{
+ // Revoke the class object, if registered
+ if (TRUE == _fRegistered)
+ {
+ CoRevokeClassObject(_dwRegId);
+ }
+
+ // Release this apps class factory, and insure the returned count is 0
+ if (0 == _pteClassFactory->Release())
+ {
+ _pteClassFactory = NULL;
+ }
+ else
+ {
+ // BUGBUG - Log error
+ }
+
+ // Uninitialize OLE only if OleInitialize succeeded
+ if (TRUE == _fInitialized)
+ {
+ CoUninitialize();
+ }
+ return(S_OK);
+}
+
+
+//+--------------------------------------------------------------
+// Function: CTestServerApp::GetEmbeddedFlag
+//
+// Synopsis: Returns TRUE if app was started for an embedded object,
+// FALSE if standalone.
+//
+// Parameters: None
+//
+// Returns: BOOL (_fEmbedded)
+//
+// History: 17-Dec-92 DeanE Created
+//
+// Notes: BUGBUG - This should be an inline method
+//---------------------------------------------------------------
+CTestServerApp::GetEmbeddedFlag()
+{
+ return(_fEmbedded);
+}
+
+
+//+--------------------------------------------------------------
+// Function: CTestServerApp::IncEmbeddedCount
+//
+// Synopsis: Increments the count of embedded objects the server
+// has open.
+//
+// Parameters: None
+//
+// Returns: ULONG (_cEmbeddedObjs)
+//
+// History: 17-Dec-92 DeanE Created
+//
+// Notes: BUGBUG - This should be an inline method
+//---------------------------------------------------------------
+ULONG CTestServerApp::IncEmbeddedCount()
+{
+ return(++_cEmbeddedObjs);
+}
+
+
+//+--------------------------------------------------------------
+// Function: CTestServerApp::DecEmbeddedCount
+//
+// Synopsis: Decrements the count of embedded objects the server
+// has open. If 0 are left and we were running for an
+// embedded object(s), shut down.
+//
+// Parameters: None
+//
+// Returns: ULONG (_cEmbeddedObjs)
+//
+// History: 17-Dec-92 DeanE Created
+//
+// Notes: BUGBUG - This should be an inline method
+//---------------------------------------------------------------
+ULONG CTestServerApp::DecEmbeddedCount()
+{
+ if ((0 == --_cEmbeddedObjs) && _fEmbedded)
+ {
+ SendMessage(g_hwndMain, WM_USER, 0xFFFFFFFF, 0xFFFFFFFF);
+ }
+
+ return(_cEmbeddedObjs);
+}
+
+
+//+--------------------------------------------------------------
+// Function: ProcessCmdline
+//
+// Synopsis: Checks the cmd line parameters, in particular for
+// '/Embedding' or '-Embedding'.
+//
+// Parameters: [lpszCmdLine] - Command line buffer.
+// [pfEmbedded] - Flag should be set to true if we get
+// the '/Embedding' switch.
+//
+// Returns: void
+//
+// History: 25-Nov-92 DeanE Created
+//
+// Notes: Only two valid commandlines for this program:
+// (1) -Embedding when started by OLE or (2) Null
+// string if started from the command line.
+//---------------------------------------------------------------
+void ProcessCmdLine(LPSTR lpszCmdline, BOOL *pfEmbedded)
+{
+ if (lpszCmdline[0] == 0)
+ {
+ *pfEmbedded = FALSE;
+ return;
+ }
+
+ if (strcmp(lpszCmdline, "-Embedding") == 0)
+ {
+ *pfEmbedded = TRUE;
+ return;
+ }
+
+ *pfEmbedded = FALSE;
+
+ return;
+}