plugins/consoles/rcons/server/win32/console_host.cpp
changeset 0 7f656887cf89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/consoles/rcons/server/win32/console_host.cpp	Wed Jun 23 15:52:26 2010 +0100
@@ -0,0 +1,101 @@
+// console_host.cpp
+// 
+// Copyright (c) 2010 Accenture. All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// 
+// Initial Contributors:
+// Accenture - Initial contribution
+//
+
+#include "stdafx.h"
+#include "resource.h"
+#include "Misc.h"
+#include "Window.h"
+#include "ConsoleWindow.h"
+#include <winsock2.h>
+#include "Server.h"
+
+void InitWinSock()
+	{
+	WORD version = MAKEWORD (2, 2);
+	WSADATA wsaData;
+
+	if (WSAStartup(version, &wsaData) == SOCKET_ERROR)
+		{
+		throw KExceptionWinSockStartupFailed;
+		}
+
+	if (version != wsaData.wVersion)
+		{
+		throw KExceptionWinSockVersionInvalid;
+		}
+	}
+
+int APIENTRY WinMain(HINSTANCE hInstance,
+                     HINSTANCE hPrevInstance,
+                     LPSTR     lpCmdLine,
+                     int       nCmdShow)
+	{
+	MSG msg;
+	HACCEL hAccelTable;
+	CServer* server;
+	try
+		{
+		hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_CONSOLE_HOST);
+		InitWinSock();
+		server = CServer::New(hInstance);
+		}
+	catch (TException aException)
+		{
+		LPCTSTR errorTitle = TEXT("Remote Console Server Initialization Error");
+		LPCTSTR errorText = NULL;
+		switch (aException)
+			{
+			case KExceptionNoMemory:
+				errorText = TEXT("Not enough memory to initialize server.");
+				break;
+			case KExceptionWindowConstructFailed:
+				errorText = TEXT("Failed to construct server window.");
+				break;
+			case KExceptionWinSockStartupFailed:
+				errorText = TEXT("Failed to initialize WINSOCK.");
+				break;
+			case KExceptionWinSockVersionInvalid:
+				errorText = TEXT("Invalid WINSOCK version.");
+				break;
+			case KExceptionSocketConstructFailed:
+				errorText = TEXT("Failed to construct server socket.");
+				break;
+			default:
+				errorText = TEXT("Unknown error.");
+				break;
+			}
+		MessageBox(NULL, errorText, errorTitle, MB_OK);
+		WSACleanup();
+		return 0;
+		}
+
+	while (GetMessage(&msg, NULL, 0, 0)) 
+		{
+		try
+			{
+			if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
+				{
+				TranslateMessage(&msg);
+				DispatchMessage(&msg);
+				}
+			}
+		catch (TException aException)
+			{
+			server->HandleException(aException);
+			}
+		}
+
+	delete server;
+	WSACleanup();
+
+	return msg.wParam;
+	}