plugins/consoles/rcons/server/win32/Preferences.cpp
changeset 0 7f656887cf89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/consoles/rcons/server/win32/Preferences.cpp	Wed Jun 23 15:52:26 2010 +0100
@@ -0,0 +1,191 @@
+// Preferences.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 "Misc.h"
+#include <fcntl.h>
+#include <io.h>
+#include <sys/stat.h>
+#include "stdafx.h"
+#include "shlwapi.h"
+#include "Preferences.h"
+
+const int KMaxFileNameLength = MAX_PATH;
+LPCTSTR KPrefsFileName = TEXT("\\console_host.ini");
+static bool sPrefsModified = FALSE;
+
+
+TPreferences::TPreferences()
+	: iServerPort(8086), iDefaultWindowWidth(80), iDefaultWindowHeight(40), iDefaultWindowPosX(0), iDefaultWindowPosY(0), iSystemPositionedWindows(TRUE), iNumOverflowLines(100)
+	{
+	wcscpy(iDefaultCaptureFilePath, TEXT("c:\\"));
+	}
+
+void PrefsFileName(LPTSTR aName)
+	{
+	if (GetModuleFileName(NULL, aName, KMaxFileNameLength) == 0)
+		{
+		throw KExceptionFailedToFindPrefsFileName;
+		}
+	if (PathRemoveFileSpec(aName) == 0)
+		{
+		throw KExceptionFailedToFindPrefsFileName;
+		}
+	if (wcscat(aName, KPrefsFileName) == 0)
+		{
+		throw KExceptionFailedToFindPrefsFileName;
+		}
+	}
+
+void TPreferences::Read()
+	{
+	TCHAR fileName[MAX_PATH];
+	PrefsFileName(fileName);
+	int file = _wopen(fileName, _O_RDWR | _O_BINARY);
+	if (file != -1)
+		{
+		int err = 0;
+		struct _stat fileStat;
+		if (_fstat(file, &fileStat) == 0)
+			{
+			if (_read(file, this, fileStat.st_size) < fileStat.st_size)
+				{
+				err = 1;
+				}
+			}
+		_close(file);
+		if (err)
+			{
+			throw KExceptionFailedToReadPrefsFile;
+			}
+		}
+	}
+
+void TPreferences::Write() const
+	{
+	if (sPrefsModified)
+		{
+		int err = 0;
+		TCHAR fileName[MAX_PATH];
+		PrefsFileName(fileName);
+		int file = _wopen(fileName, _O_CREAT | _O_WRONLY | _O_BINARY, _S_IWRITE);
+		if (file != -1)
+			{
+			int err = 0;
+			if (_write(file, this, sizeof(TPreferences)) < sizeof(TPreferences))
+				{
+				err = 1;
+				}
+			_close(file);
+			}
+		else
+			{
+			err = 1;
+			}
+		if (err)
+			{
+			_wremove(fileName);
+			throw KExceptionFailedToWritePrefsFile;
+			}
+		else
+			{
+			sPrefsModified = FALSE;
+			}
+		}
+	}
+
+unsigned short TPreferences::ServerPort() const
+	{
+	return iServerPort;
+	}
+
+unsigned int TPreferences::DefaultWindowWidth() const
+	{
+	return iDefaultWindowWidth;
+	}
+
+unsigned int TPreferences::DefaultWindowHeight() const
+	{
+	return iDefaultWindowHeight;
+	}
+
+unsigned int TPreferences::DefaultWindowPosX() const
+	{
+	return iDefaultWindowPosX;
+	}
+
+unsigned int TPreferences::DefaultWindowPosY() const
+	{
+	return iDefaultWindowPosY;
+	}
+
+int TPreferences::SystemPositionedWindows() const
+	{
+	return iSystemPositionedWindows;
+	}
+
+unsigned int TPreferences::NumOverflowLines() const
+	{
+	return iNumOverflowLines;
+	}
+
+LPCTSTR TPreferences::DefaultCaptureFilePath() const
+	{
+	return iDefaultCaptureFilePath;
+	}
+
+void TPreferences::SetServerPort(unsigned short aPort)
+	{
+	iServerPort = aPort;
+	sPrefsModified = TRUE;
+	}
+
+void TPreferences::SetDefaultWindowWidth(unsigned int aWidth)
+	{
+	iDefaultWindowWidth = aWidth;
+	sPrefsModified = TRUE;
+	}
+
+void TPreferences::SetDefaultWindowHeight(unsigned int aHeight)
+	{
+	iDefaultWindowHeight = aHeight;
+	sPrefsModified = TRUE;
+	}
+
+void TPreferences::SetDefaultWindowPosX(unsigned int aPosX)
+	{
+	iDefaultWindowPosX = aPosX;
+	sPrefsModified = TRUE;
+	}
+
+void TPreferences::SetDefaultWindowPosY(unsigned int aPosY)
+	{
+	iDefaultWindowPosY = aPosY;
+	sPrefsModified = TRUE;
+	}
+
+void TPreferences::SetSystemPositionedWindows(int aSystemPositionedWindows)
+	{
+	iSystemPositionedWindows = aSystemPositionedWindows;
+	sPrefsModified = TRUE;
+	}
+
+void TPreferences::SetNumOverflowLines(unsigned int aNumOverflowLines)
+	{
+	iNumOverflowLines = aNumOverflowLines;
+	sPrefsModified = TRUE;
+	}
+
+void TPreferences::SetDefaultCaptureFilePath(LPCTSTR aPath)
+	{
+	wcscpy(iDefaultCaptureFilePath, aPath);
+	sPrefsModified = TRUE;
+	}