Adam Johnson
13 years ago
29 changed files with 0 additions and 3166 deletions
@ -1,51 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#include <windows.h> |
|
||||||
|
|
||||||
__declspec(dllexport) const unsigned long* GetKey() |
|
||||||
{ |
|
||||||
// So the crackers know who the tard is
|
|
||||||
static const char* tauntText = "My copy protection is uncrackable! -Brice"; |
|
||||||
|
|
||||||
static const unsigned long kDefaultKey[4] = { 0x6c0a5452, 0x3827d0f, 0x3a170b92, 0x16db7fc2 }; |
|
||||||
return kDefaultKey; |
|
||||||
} |
|
@ -1,63 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#include "plClientKey.h" |
|
||||||
|
|
||||||
typedef const uint32_t* (*GETKEY)(); |
|
||||||
|
|
||||||
const uint32_t* plClientKey::GetKey() |
|
||||||
{ |
|
||||||
HMODULE hDll = LoadLibrary("sp.dll"); |
|
||||||
if (hDll) |
|
||||||
{ |
|
||||||
GETKEY getKey = (GETKEY)GetProcAddress(hDll, "GetKey"); |
|
||||||
if (getKey) |
|
||||||
{ |
|
||||||
static uint32_t key[4]; |
|
||||||
memcpy(key, getKey(), sizeof(key)); |
|
||||||
FreeLibrary(hDll); |
|
||||||
return key; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return nil; |
|
||||||
} |
|
||||||
|
|
@ -1,5 +0,0 @@ |
|||||||
LIBRARY |
|
||||||
EXPORTS |
|
||||||
GetKey @1 |
|
||||||
SECTIONS |
|
||||||
.data READ WRITE |
|
@ -1,59 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#ifndef plClientKey_h_inc |
|
||||||
#define plClientKey_h_inc |
|
||||||
|
|
||||||
#include "HeadSpin.h" |
|
||||||
|
|
||||||
//
|
|
||||||
// For getting the "SafeDisc protected" encryption key in single player mode
|
|
||||||
//
|
|
||||||
// Include plClientKey.cpp/h in your project and call plClientKey::GetKey
|
|
||||||
// It will load the Dll and get the key for you
|
|
||||||
// Returns nil if it fails
|
|
||||||
//
|
|
||||||
namespace plClientKey |
|
||||||
{ |
|
||||||
const uint32_t* GetKey(); |
|
||||||
} |
|
||||||
|
|
||||||
#endif // plClientKey_h_inc
|
|
Before Width: | Height: | Size: 2.5 KiB |
@ -1,63 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#include "HeadSpin.h" |
|
||||||
#include "plPlasmaInstaller.h" |
|
||||||
#include "jvCoreUtil.h" |
|
||||||
|
|
||||||
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) |
|
||||||
{ |
|
||||||
jvCoreUtil::SetHInstance(hInstance); |
|
||||||
plPlasmaInstaller installer; |
|
||||||
installer.Create(); |
|
||||||
|
|
||||||
MSG msg; |
|
||||||
while (GetMessage(&msg, NULL, 0, 0)) |
|
||||||
{ |
|
||||||
if (!IsDialogMessage(installer.GetHWnd(), &msg)) |
|
||||||
{ |
|
||||||
TranslateMessage(&msg); |
|
||||||
DispatchMessage(&msg); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return msg.wParam; |
|
||||||
} |
|
@ -1,113 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#include "HeadSpin.h" |
|
||||||
#include "plInstallerReg.h" |
|
||||||
#include <windows.h> |
|
||||||
|
|
||||||
static HKEY GetInstallerKey() |
|
||||||
{ |
|
||||||
HKEY hSoftKey = NULL; |
|
||||||
HKEY hCompanyKey = NULL; |
|
||||||
HKEY hAppKey = NULL; |
|
||||||
|
|
||||||
if(RegOpenKeyEx(HKEY_CURRENT_USER, "software", 0, KEY_WRITE|KEY_READ, |
|
||||||
&hSoftKey) == ERROR_SUCCESS) |
|
||||||
{ |
|
||||||
DWORD dw; |
|
||||||
if(RegCreateKeyEx(hSoftKey, "Cyan", 0, REG_NONE, |
|
||||||
REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL, |
|
||||||
&hCompanyKey, &dw) == ERROR_SUCCESS) |
|
||||||
{ |
|
||||||
RegCreateKeyEx(hCompanyKey, "PlasmaInstaller", 0, REG_NONE, |
|
||||||
REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL, |
|
||||||
&hAppKey, &dw); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (hSoftKey != NULL) |
|
||||||
RegCloseKey(hSoftKey); |
|
||||||
if (hCompanyKey != NULL) |
|
||||||
RegCloseKey(hCompanyKey); |
|
||||||
|
|
||||||
return hAppKey; |
|
||||||
} |
|
||||||
|
|
||||||
static void WriteRegString(const char* valueName, const char* value) |
|
||||||
{ |
|
||||||
HKEY installKey = GetInstallerKey(); |
|
||||||
RegSetValueEx(installKey, valueName, 0, REG_SZ, (const BYTE*)value, strlen(value)+1); |
|
||||||
RegCloseKey(installKey); |
|
||||||
} |
|
||||||
|
|
||||||
static bool ReadRegString(const char* valueName, char* value, DWORD size) |
|
||||||
{ |
|
||||||
HKEY installKey = GetInstallerKey(); |
|
||||||
bool ret = (RegQueryValueEx(installKey, valueName, NULL, NULL, (LPBYTE)value, &size) == ERROR_SUCCESS); |
|
||||||
RegCloseKey(installKey); |
|
||||||
return ret; |
|
||||||
} |
|
||||||
|
|
||||||
void plInstallerReg::SetClientDir(const char* dir) |
|
||||||
{ |
|
||||||
WriteRegString("Client", dir); |
|
||||||
} |
|
||||||
|
|
||||||
void plInstallerReg::SetMaxDir(const char* dir) |
|
||||||
{ |
|
||||||
WriteRegString("3dsmax", dir); |
|
||||||
} |
|
||||||
|
|
||||||
const char* plInstallerReg::GetClientDir() |
|
||||||
{ |
|
||||||
static char dir[MAX_PATH]; |
|
||||||
if (!ReadRegString("Client", dir, sizeof(dir))) |
|
||||||
strcpy(dir, "C:\\PlasmaClient"); |
|
||||||
return dir; |
|
||||||
} |
|
||||||
|
|
||||||
const char* plInstallerReg::GetMaxDir() |
|
||||||
{ |
|
||||||
static char dir[MAX_PATH]; |
|
||||||
dir[0] = '\0'; |
|
||||||
ReadRegString("3dsmax", dir, sizeof(dir)); |
|
||||||
return dir; |
|
||||||
} |
|
@ -1,50 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
|
|
||||||
namespace plInstallerReg |
|
||||||
{ |
|
||||||
void SetClientDir(const char* dir); |
|
||||||
void SetMaxDir(const char* dir); |
|
||||||
|
|
||||||
const char* GetClientDir(); |
|
||||||
const char* GetMaxDir(); |
|
||||||
} |
|
@ -1,408 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#include "HeadSpin.h" |
|
||||||
#include "plPlasmaInstaller.h" |
|
||||||
#include "resource.h" |
|
||||||
#include <windowsx.h> |
|
||||||
#include <commctrl.h> |
|
||||||
|
|
||||||
#include "../plFile/hsFiles.h" |
|
||||||
#include "plUnzip.h" |
|
||||||
#include "plInstallerReg.h" |
|
||||||
#include "../plFile/plBrowseFolder.h" |
|
||||||
#include "plSetPlasmaPath.h" |
|
||||||
|
|
||||||
plPlasmaInstaller::plPlasmaInstaller() |
|
||||||
{ |
|
||||||
fDailyDir[0] = '\0'; |
|
||||||
fDidGet = false; |
|
||||||
fStatusList = nil; |
|
||||||
|
|
||||||
INITCOMMONCONTROLSEX icc = {0}; |
|
||||||
icc.dwSize = sizeof(INITCOMMONCONTROLSEX); |
|
||||||
icc.dwICC = ICC_DATE_CLASSES; |
|
||||||
InitCommonControlsEx(&icc); |
|
||||||
} |
|
||||||
|
|
||||||
void plPlasmaInstaller::Create() |
|
||||||
{ |
|
||||||
ICreateDialog(IDD_INSTALLER, NULL); |
|
||||||
} |
|
||||||
|
|
||||||
static const char* kAllClientExes = "AllClientExes.zip"; |
|
||||||
static const char* kAllDllsRelease = "AllDllsRelease.zip"; |
|
||||||
static const char* kScripts = "Scripts.zip"; |
|
||||||
static const char* kTools = "AllToolsRelease.zip"; |
|
||||||
|
|
||||||
bool FileExists(const char* path, const char* filename) |
|
||||||
{ |
|
||||||
char fullpath[MAX_PATH]; |
|
||||||
sprintf(fullpath, "%s%s", path, filename); |
|
||||||
HANDLE hFile = CreateFile(fullpath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); |
|
||||||
if (hFile != INVALID_HANDLE_VALUE) |
|
||||||
{ |
|
||||||
CloseHandle(hFile); |
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
bool plPlasmaInstaller::IGetDailyDir() |
|
||||||
{ |
|
||||||
// Get the branch
|
|
||||||
HWND hBuild = GetDlgItem(fDlg, IDC_BUILD_COMBO); |
|
||||||
int idx = ComboBox_GetCurSel(hBuild); |
|
||||||
int buildServer = ComboBox_GetItemData(hBuild, idx); |
|
||||||
|
|
||||||
HWND hTime = GetDlgItem(fDlg, IDC_TIME_COMBO); |
|
||||||
idx = ComboBox_GetCurSel(hTime); |
|
||||||
int time = ComboBox_GetItemData(hTime, idx); |
|
||||||
|
|
||||||
// Get the build date
|
|
||||||
SYSTEMTIME date; |
|
||||||
DateTime_GetSystemtime(GetDlgItem(fDlg, IDC_BRANCH_DATE), &date); |
|
||||||
char dateStr[] = "xx-xx-xxxx"; |
|
||||||
sprintf(dateStr, "%02d-%02d-%04d", date.wMonth, date.wDay, date.wYear); |
|
||||||
|
|
||||||
fDailyDir[0] = '\0'; |
|
||||||
|
|
||||||
IAddStatusLine("Searching for %s build...", dateStr); |
|
||||||
|
|
||||||
|
|
||||||
char buildDir[MAX_PATH]; |
|
||||||
|
|
||||||
static const char* kMainBuild = "\\\\Plasmabuild\\Output\\"; |
|
||||||
static const char* kBranchBuild = "\\\\Branchbuild\\Output\\"; |
|
||||||
static const char* kActiveBuild = "\\\\Activebuild\\Output\\"; |
|
||||||
static const char* kInternalMain = "Main-Internal\\"; |
|
||||||
static const char* kInternalBranch = "Branch-Internal\\"; |
|
||||||
static const char* kInternalActive = "Active-Internal\\"; |
|
||||||
|
|
||||||
switch (buildServer) |
|
||||||
{ |
|
||||||
case kBuildMain: strcpy(buildDir, kMainBuild); break; |
|
||||||
case kBuildBranch: strcpy(buildDir, kBranchBuild); break; |
|
||||||
case kBuildActive: strcpy(buildDir, kActiveBuild); break; |
|
||||||
} |
|
||||||
|
|
||||||
switch (time) |
|
||||||
{ |
|
||||||
case kNightly: |
|
||||||
strcat(buildDir, "Nightly\\"); |
|
||||||
break; |
|
||||||
case kAfternoon: |
|
||||||
strcat(buildDir, "Afternoon\\"); |
|
||||||
break; |
|
||||||
case kEvening: |
|
||||||
strcat(buildDir, "Evening\\"); |
|
||||||
break; |
|
||||||
} |
|
||||||
|
|
||||||
strcat(buildDir, dateStr); |
|
||||||
strcat(buildDir, "\\"); |
|
||||||
|
|
||||||
switch (buildServer) |
|
||||||
{ |
|
||||||
case kBuildMain: strcat(buildDir, kInternalMain); break; |
|
||||||
case kBuildBranch: strcat(buildDir, kInternalBranch); break; |
|
||||||
case kBuildActive: strcat(buildDir, kInternalActive); break; |
|
||||||
} |
|
||||||
|
|
||||||
if (FileExists(buildDir, kAllClientExes) && FileExists(buildDir, kAllDllsRelease) && FileExists(buildDir, kScripts)) |
|
||||||
{ |
|
||||||
strcpy(fDailyDir, buildDir); |
|
||||||
|
|
||||||
const char* serverName = nil; |
|
||||||
switch (buildServer) |
|
||||||
{ |
|
||||||
case kBuildMain: serverName = "Main"; break; |
|
||||||
case kBuildBranch: serverName = "Branch"; break; |
|
||||||
case kBuildActive: serverName = "Active"; break; |
|
||||||
} |
|
||||||
IAddStatusLine("Found %s at %s", serverName, fDailyDir); |
|
||||||
|
|
||||||
EnableWindow(GetDlgItem(fDlg, IDC_GET_BUTTON), TRUE); |
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
IAddStatusLine("Couldn't find build"); |
|
||||||
EnableWindow(GetDlgItem(fDlg, IDC_GET_BUTTON), FALSE); |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
void plPlasmaInstaller::IInit() |
|
||||||
{ |
|
||||||
const char* clientDir = plInstallerReg::GetClientDir(); |
|
||||||
SetDlgItemText(fDlg, IDC_CLIENT_EDIT, clientDir); |
|
||||||
|
|
||||||
const char* maxDir = plInstallerReg::GetMaxDir(); |
|
||||||
SetDlgItemText(fDlg, IDC_3DSMAX_EDIT, maxDir); |
|
||||||
|
|
||||||
fStatusList = GetDlgItem(fDlg, IDC_STATUS_LIST); |
|
||||||
|
|
||||||
HWND hCombo = GetDlgItem(fDlg, IDC_BUILD_COMBO); |
|
||||||
int idx = ComboBox_AddString(hCombo, "Main"); |
|
||||||
ComboBox_SetItemData(hCombo, idx, kBuildMain); |
|
||||||
ComboBox_SetCurSel(hCombo, idx); |
|
||||||
idx = ComboBox_AddString(hCombo, "Branch"); |
|
||||||
ComboBox_SetItemData(hCombo, idx, kBuildBranch); |
|
||||||
idx = ComboBox_AddString(hCombo, "Active"); |
|
||||||
ComboBox_SetItemData(hCombo, idx, kBuildActive); |
|
||||||
|
|
||||||
HWND hTime = GetDlgItem(fDlg, IDC_TIME_COMBO); |
|
||||||
idx = ComboBox_AddString(hTime, "Nightly"); |
|
||||||
ComboBox_SetItemData(hTime, idx, kNightly); |
|
||||||
ComboBox_SetCurSel(hTime, idx); |
|
||||||
idx = ComboBox_AddString(hTime, "Afternoon"); |
|
||||||
ComboBox_SetItemData(hTime, idx, kAfternoon); |
|
||||||
idx = ComboBox_AddString(hTime, "Evening"); |
|
||||||
ComboBox_SetItemData(hTime, idx, kEvening); |
|
||||||
|
|
||||||
CheckDlgButton(fDlg, IDC_CLIENT_CHECK, BST_CHECKED); |
|
||||||
CheckDlgButton(fDlg, IDC_SCRIPTS_CHECK, BST_CHECKED); |
|
||||||
CheckDlgButton(fDlg, IDC_PLUGINS_CHECK, BST_CHECKED); |
|
||||||
|
|
||||||
ShowWindow(fDlg, SW_SHOW); |
|
||||||
|
|
||||||
IGetDailyDir(); |
|
||||||
} |
|
||||||
|
|
||||||
BOOL plPlasmaInstaller::IDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) |
|
||||||
{ |
|
||||||
switch (msg) |
|
||||||
{ |
|
||||||
case WM_INITDIALOG: |
|
||||||
IInit(); |
|
||||||
SetFocus(GetDlgItem(fDlg, IDC_GET_BUTTON)); |
|
||||||
return FALSE; |
|
||||||
|
|
||||||
case WM_CLOSE: |
|
||||||
DestroyWindow(hDlg); |
|
||||||
return TRUE; |
|
||||||
|
|
||||||
case WM_DESTROY: |
|
||||||
PostQuitMessage(0); |
|
||||||
return TRUE; |
|
||||||
|
|
||||||
case WM_COMMAND: |
|
||||||
if (HIWORD(wParam) == BN_CLICKED) |
|
||||||
{ |
|
||||||
switch (LOWORD(wParam)) |
|
||||||
{ |
|
||||||
case IDCANCEL: |
|
||||||
PostMessage(hDlg, WM_CLOSE, 0, 0); |
|
||||||
return TRUE; |
|
||||||
|
|
||||||
case IDC_BROWSE_3DSMAX: |
|
||||||
case IDC_BROWSE_CLIENT: |
|
||||||
IGetFolder(LOWORD(wParam) == IDC_BROWSE_CLIENT); |
|
||||||
return TRUE; |
|
||||||
|
|
||||||
case IDC_GET_BUTTON: |
|
||||||
if (fDidGet) |
|
||||||
PostMessage(hDlg, WM_CLOSE, 0, 0); |
|
||||||
else |
|
||||||
IGet(); |
|
||||||
return TRUE; |
|
||||||
} |
|
||||||
} |
|
||||||
else if (HIWORD(wParam) == CBN_SELCHANGE && (LOWORD(wParam) == IDC_TIME_COMBO || LOWORD(wParam) == IDC_BUILD_COMBO)) |
|
||||||
{ |
|
||||||
IGetDailyDir(); |
|
||||||
return TRUE; |
|
||||||
} |
|
||||||
break; |
|
||||||
|
|
||||||
case WM_NOTIFY: |
|
||||||
{ |
|
||||||
NMHDR* nmhdr = (NMHDR*)lParam; |
|
||||||
if (nmhdr->idFrom == IDC_BRANCH_DATE && nmhdr->code == DTN_CLOSEUP/*DTN_DATETIMECHANGE*/) |
|
||||||
{ |
|
||||||
IGetDailyDir(); |
|
||||||
return TRUE; |
|
||||||
} |
|
||||||
} |
|
||||||
break; |
|
||||||
} |
|
||||||
|
|
||||||
return FALSE; |
|
||||||
} |
|
||||||
|
|
||||||
void plPlasmaInstaller::IExtractZip(const char* filename, const char* dest) |
|
||||||
{ |
|
||||||
plUnzip unzip; |
|
||||||
if (unzip.Open(filename)) |
|
||||||
{ |
|
||||||
IAddStatusLine("Extracting %s...", filename); |
|
||||||
|
|
||||||
char buf[MAX_PATH]; |
|
||||||
while (unzip.ExtractNext(dest, buf)) |
|
||||||
IAddStatusLine(" %s", buf); |
|
||||||
IAddStatusLine(" %s", buf); |
|
||||||
|
|
||||||
unzip.Close(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void plPlasmaInstaller::IGet() |
|
||||||
{ |
|
||||||
bool getClient = (IsDlgButtonChecked(fDlg, IDC_CLIENT_CHECK) == BST_CHECKED); |
|
||||||
bool getScripts = (IsDlgButtonChecked(fDlg, IDC_SCRIPTS_CHECK) == BST_CHECKED); |
|
||||||
bool getPlugins = (IsDlgButtonChecked(fDlg, IDC_PLUGINS_CHECK) == BST_CHECKED); |
|
||||||
bool getTools = (IsDlgButtonChecked(fDlg, IDC_TOOLS_CHECK) == BST_CHECKED); |
|
||||||
|
|
||||||
const char* clientDir = plInstallerReg::GetClientDir(); |
|
||||||
if (*clientDir == '\0' && (getClient || getScripts)) |
|
||||||
{ |
|
||||||
MessageBox(fDlg, "You need to set your client directory", "Plasma Installer", MB_OK | MB_ICONASTERISK); |
|
||||||
return; |
|
||||||
} |
|
||||||
const char* maxDir = plInstallerReg::GetMaxDir(); |
|
||||||
if (*maxDir == '\0' && getPlugins) |
|
||||||
{ |
|
||||||
MessageBox(fDlg, "You need to set your 3dsmax directory", "Plasma Installer", MB_OK | MB_ICONASTERISK); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
HWND hGetButton = GetDlgItem(fDlg, IDC_GET_BUTTON); |
|
||||||
EnableWindow(hGetButton, FALSE); |
|
||||||
HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); |
|
||||||
|
|
||||||
char buf[MAX_PATH]; |
|
||||||
|
|
||||||
if (getScripts) |
|
||||||
{ |
|
||||||
sprintf(buf, "%s%s", fDailyDir, kScripts); |
|
||||||
IExtractZip(buf, clientDir); |
|
||||||
} |
|
||||||
|
|
||||||
if (getClient) |
|
||||||
{ |
|
||||||
sprintf(buf, "%s%s", fDailyDir, kAllClientExes); |
|
||||||
IExtractZip(buf, clientDir); |
|
||||||
} |
|
||||||
|
|
||||||
if (getPlugins) |
|
||||||
{ |
|
||||||
sprintf(buf, "%s%s", fDailyDir, kAllDllsRelease); |
|
||||||
char pluginDir[MAX_PATH]; |
|
||||||
sprintf(pluginDir, "%s\\plugins", maxDir); |
|
||||||
IExtractZip(buf, pluginDir); |
|
||||||
|
|
||||||
IAddStatusLine("Updating PlasmaMAX2.ini..."); |
|
||||||
sprintf(buf, "%s\\plugcfg\\PlasmaMAX2.ini", maxDir); |
|
||||||
WritePrivateProfileString("SceneViewer", "Directory", clientDir, buf); |
|
||||||
} |
|
||||||
|
|
||||||
if (getTools) |
|
||||||
{ |
|
||||||
sprintf(buf, "%s%s", fDailyDir, kTools); |
|
||||||
|
|
||||||
char toolBuf[MAX_PATH]; |
|
||||||
sprintf(toolBuf, "%s\\Tools", clientDir); |
|
||||||
IExtractZip(buf, toolBuf); |
|
||||||
} |
|
||||||
|
|
||||||
IAddStatusLine("Updating path..."); |
|
||||||
SetPlasmaPath(clientDir); |
|
||||||
|
|
||||||
IAddStatusLine("Done"); |
|
||||||
|
|
||||||
SetCursor(hOldCursor); |
|
||||||
|
|
||||||
fDidGet = true; |
|
||||||
SetWindowText(hGetButton, "Close"); |
|
||||||
EnableWindow(hGetButton, TRUE); |
|
||||||
} |
|
||||||
|
|
||||||
void plPlasmaInstaller::IGetFolder(bool client) |
|
||||||
{ |
|
||||||
char path[MAX_PATH]; |
|
||||||
if (client) |
|
||||||
strcpy(path, plInstallerReg::GetClientDir()); |
|
||||||
else |
|
||||||
strcpy(path, plInstallerReg::GetMaxDir()); |
|
||||||
|
|
||||||
if (plBrowseFolder::GetFolder(path, path)) |
|
||||||
{ |
|
||||||
if (client) |
|
||||||
{ |
|
||||||
SetDlgItemText(fDlg, IDC_CLIENT_EDIT, path); |
|
||||||
plInstallerReg::SetClientDir(path); |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
SetDlgItemText(fDlg, IDC_3DSMAX_EDIT, path); |
|
||||||
plInstallerReg::SetMaxDir(path); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void plPlasmaInstaller::IAddStatusLine(const char* format, ...) |
|
||||||
{ |
|
||||||
if (!format || *format == '\0') |
|
||||||
return; |
|
||||||
|
|
||||||
va_list args; |
|
||||||
va_start(args, format); |
|
||||||
|
|
||||||
char buf[2048]; |
|
||||||
int numWritten = _vsnprintf(buf, sizeof(buf), format, args); |
|
||||||
hsAssert(numWritten > 0, "Buffer too small"); |
|
||||||
|
|
||||||
va_end(args); |
|
||||||
|
|
||||||
int idx = ListBox_AddString(fStatusList, buf); |
|
||||||
ListBox_SetCurSel(fStatusList, idx); |
|
||||||
|
|
||||||
// Pump the message queue
|
|
||||||
MSG msg; |
|
||||||
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) |
|
||||||
{ |
|
||||||
if (!IsDialogMessage(&msg)) |
|
||||||
{ |
|
||||||
TranslateMessage(&msg); |
|
||||||
DispatchMessage(&msg); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,73 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#include "jvBaseDlg.h" |
|
||||||
|
|
||||||
class plPlasmaInstaller : public jvBaseDlg |
|
||||||
{ |
|
||||||
protected: |
|
||||||
char fDailyDir[MAX_PATH]; |
|
||||||
bool fDidGet; |
|
||||||
|
|
||||||
HWND fStatusList; |
|
||||||
|
|
||||||
enum { kBuildMain, kBuildBranch, kBuildActive }; |
|
||||||
enum { kNightly, kAfternoon, kEvening }; |
|
||||||
|
|
||||||
virtual BOOL IDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); |
|
||||||
|
|
||||||
bool IGetDailyDir(); |
|
||||||
void IGetFolder(bool client); |
|
||||||
|
|
||||||
void IGet(); |
|
||||||
|
|
||||||
void IInit(); |
|
||||||
void IExtractZip(const char* filename, const char* dest); |
|
||||||
|
|
||||||
void IAddStatusLine(const char* format, ...); |
|
||||||
|
|
||||||
public: |
|
||||||
plPlasmaInstaller(); |
|
||||||
|
|
||||||
void Create(); |
|
||||||
|
|
||||||
HWND GetHWnd() { return fDlg; } |
|
||||||
}; |
|
@ -1,122 +0,0 @@ |
|||||||
//Microsoft Developer Studio generated resource script. |
|
||||||
// |
|
||||||
#include "resource.h" |
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN |
|
||||||
#include <windows.h> |
|
||||||
#define IDC_STATIC (-1) // all static controls |
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// English (U.S.) resources |
|
||||||
|
|
||||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) |
|
||||||
#ifdef _WIN32 |
|
||||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US |
|
||||||
#pragma code_page(1252) |
|
||||||
#endif //_WIN32 |
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// |
|
||||||
// Dialog |
|
||||||
// |
|
||||||
|
|
||||||
IDD_INSTALLER DIALOG DISCARDABLE 0, 0, 241, 170 |
|
||||||
STYLE DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | |
|
||||||
WS_SYSMENU |
|
||||||
CAPTION "Plasma Installer" |
|
||||||
FONT 8, "MS Sans Serif" |
|
||||||
BEGIN |
|
||||||
LTEXT "Build:",IDC_STATIC,7,8,18,8 |
|
||||||
COMBOBOX IDC_TIME_COMBO,27,6,46,167,CBS_DROPDOWNLIST | WS_VSCROLL | |
|
||||||
WS_TABSTOP |
|
||||||
LTEXT "3dsmax Directory:",IDC_STATIC,7,26,57,8 |
|
||||||
EDITTEXT IDC_3DSMAX_EDIT,7,36,173,12,ES_AUTOHSCROLL | ES_READONLY |
|
||||||
PUSHBUTTON "Browse...",IDC_BROWSE_3DSMAX,183,35,50,14 |
|
||||||
LTEXT "Client Directory:",IDC_STATIC,7,53,50,8 |
|
||||||
EDITTEXT IDC_CLIENT_EDIT,7,63,173,12,ES_AUTOHSCROLL | ES_READONLY |
|
||||||
PUSHBUTTON "Browse...",IDC_BROWSE_CLIENT,183,62,50,14 |
|
||||||
DEFPUSHBUTTON "Get",IDC_GET_BUTTON,93,146,56,16,WS_DISABLED |
|
||||||
LISTBOX IDC_STATUS_LIST,7,85,226,54,LBS_NOSEL | WS_VSCROLL | |
|
||||||
WS_TABSTOP |
|
||||||
CONTROL "DateTimePicker1",IDC_BRANCH_DATE,"SysDateTimePick32", |
|
||||||
DTS_RIGHTALIGN | WS_TABSTOP,125,6,55,12 |
|
||||||
COMBOBOX IDC_BUILD_COMBO,76,6,46,167,CBS_DROPDOWNLIST | |
|
||||||
WS_VSCROLL | WS_TABSTOP |
|
||||||
CONTROL "Client",IDC_CLIENT_CHECK,"Button",BS_AUTOCHECKBOX | |
|
||||||
WS_TABSTOP,159,144,33,10 |
|
||||||
CONTROL "Scripts",IDC_SCRIPTS_CHECK,"Button",BS_AUTOCHECKBOX | |
|
||||||
WS_TABSTOP,159,154,37,10 |
|
||||||
CONTROL "Plugins",IDC_PLUGINS_CHECK,"Button",BS_AUTOCHECKBOX | |
|
||||||
WS_TABSTOP,197,144,39,10 |
|
||||||
CONTROL "Tools",IDC_TOOLS_CHECK,"Button",BS_AUTOCHECKBOX | |
|
||||||
WS_TABSTOP,197,154,33,10 |
|
||||||
END |
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// |
|
||||||
// DESIGNINFO |
|
||||||
// |
|
||||||
|
|
||||||
#ifdef APSTUDIO_INVOKED |
|
||||||
GUIDELINES DESIGNINFO DISCARDABLE |
|
||||||
BEGIN |
|
||||||
IDD_INSTALLER, DIALOG |
|
||||||
BEGIN |
|
||||||
LEFTMARGIN, 7 |
|
||||||
RIGHTMARGIN, 234 |
|
||||||
TOPMARGIN, 7 |
|
||||||
BOTTOMMARGIN, 163 |
|
||||||
END |
|
||||||
END |
|
||||||
#endif // APSTUDIO_INVOKED |
|
||||||
|
|
||||||
|
|
||||||
#ifdef APSTUDIO_INVOKED |
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// |
|
||||||
// TEXTINCLUDE |
|
||||||
// |
|
||||||
|
|
||||||
1 TEXTINCLUDE DISCARDABLE |
|
||||||
BEGIN |
|
||||||
"resource.h\0" |
|
||||||
END |
|
||||||
|
|
||||||
2 TEXTINCLUDE DISCARDABLE |
|
||||||
BEGIN |
|
||||||
"\0" |
|
||||||
END |
|
||||||
|
|
||||||
3 TEXTINCLUDE DISCARDABLE |
|
||||||
BEGIN |
|
||||||
"\r\n" |
|
||||||
"\0" |
|
||||||
END |
|
||||||
|
|
||||||
#endif // APSTUDIO_INVOKED |
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// |
|
||||||
// Icon |
|
||||||
// |
|
||||||
|
|
||||||
// Icon with lowest ID value placed first to ensure application icon |
|
||||||
// remains consistent on all systems. |
|
||||||
IDI_ICON1 ICON DISCARDABLE "Dirt.ICO" |
|
||||||
#endif // English (U.S.) resources |
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef APSTUDIO_INVOKED |
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// |
|
||||||
// Generated from the TEXTINCLUDE 3 resource. |
|
||||||
// |
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
#endif // not APSTUDIO_INVOKED |
|
||||||
|
|
@ -1,120 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#include "HeadSpin.h" |
|
||||||
#include <windows.h> |
|
||||||
|
|
||||||
static HKEY GetEnvironKey() |
|
||||||
{ |
|
||||||
HKEY hSystemKey = NULL; |
|
||||||
HKEY hControlSetKey = NULL; |
|
||||||
HKEY hControlKey = NULL; |
|
||||||
HKEY hSessionKey = NULL; |
|
||||||
HKEY hEnvironKey = NULL; |
|
||||||
|
|
||||||
if ((RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM", 0, KEY_READ, &hSystemKey) == ERROR_SUCCESS) && |
|
||||||
(RegOpenKeyEx(hSystemKey, "CurrentControlSet", 0, KEY_READ, &hControlSetKey) == ERROR_SUCCESS) && |
|
||||||
(RegOpenKeyEx(hControlSetKey, "Control", 0, KEY_READ, &hControlKey) == ERROR_SUCCESS) && |
|
||||||
(RegOpenKeyEx(hControlKey, "Session Manager", 0, KEY_READ, &hSessionKey) == ERROR_SUCCESS)) |
|
||||||
{ |
|
||||||
RegOpenKeyEx(hSessionKey, "Environment", 0, KEY_READ | KEY_WRITE, &hEnvironKey); |
|
||||||
} |
|
||||||
|
|
||||||
if (hSystemKey != NULL) |
|
||||||
RegCloseKey(hSystemKey); |
|
||||||
if (hControlSetKey != NULL) |
|
||||||
RegCloseKey(hControlSetKey); |
|
||||||
if (hControlKey != NULL) |
|
||||||
RegCloseKey(hControlKey); |
|
||||||
if (hSessionKey != NULL) |
|
||||||
RegCloseKey(hSessionKey); |
|
||||||
|
|
||||||
return hEnvironKey; |
|
||||||
} |
|
||||||
|
|
||||||
void SetPlasmaPath(const char* plasmaPath) |
|
||||||
{ |
|
||||||
bool pathSet = false; |
|
||||||
|
|
||||||
HKEY hEnvironKey = GetEnvironKey(); |
|
||||||
if (hEnvironKey) |
|
||||||
{ |
|
||||||
// Make sure the PlasmaGameDir var is in the path
|
|
||||||
DWORD size = 0; |
|
||||||
if (ERROR_SUCCESS == RegQueryValueEx(hEnvironKey, "Path", NULL, NULL, NULL, &size)) |
|
||||||
{ |
|
||||||
char* oldPath = new char[size]; |
|
||||||
static const char* kPlasmaVar = "%PlasmaGameDir%"; |
|
||||||
|
|
||||||
if (ERROR_SUCCESS == RegQueryValueEx(hEnvironKey, "Path", NULL, NULL, (BYTE*)oldPath, &size)) |
|
||||||
{ |
|
||||||
pathSet = (strstr(oldPath, kPlasmaVar) != NULL); |
|
||||||
|
|
||||||
if (!pathSet) |
|
||||||
{ |
|
||||||
char* newPath = new char[size+strlen(kPlasmaVar)+1]; |
|
||||||
strcpy(newPath, oldPath); |
|
||||||
strcat(newPath, ";"); |
|
||||||
strcat(newPath, kPlasmaVar); |
|
||||||
|
|
||||||
RegSetValueEx(hEnvironKey, "Path", 0, REG_EXPAND_SZ, (BYTE*)newPath, strlen(newPath)+1); |
|
||||||
|
|
||||||
delete [] newPath; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
delete [] oldPath; |
|
||||||
} |
|
||||||
|
|
||||||
// Set the PlasmaGameDir var
|
|
||||||
RegSetValueEx(hEnvironKey, "PlasmaGameDir", 0, REG_SZ, (BYTE*)plasmaPath, strlen(plasmaPath)+1); |
|
||||||
|
|
||||||
// Notify command prompts and stuff that environ changed
|
|
||||||
DWORD ret; |
|
||||||
SendMessageTimeout(HWND_BROADCAST, |
|
||||||
WM_SETTINGCHANGE, |
|
||||||
0, |
|
||||||
(LPARAM)"Environment", |
|
||||||
SMTO_ABORTIFHUNG, |
|
||||||
5000, |
|
||||||
&ret); |
|
||||||
} |
|
||||||
} |
|
@ -1,42 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
void SetPlasmaPath(const char* plasmaPath); |
|
@ -1,169 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#include "HeadSpin.h" |
|
||||||
#include "plUnzip.h" |
|
||||||
#include "hsTypes.h" |
|
||||||
#include "hsWindows.h" |
|
||||||
#include "hsStream.h" |
|
||||||
|
|
||||||
plUnzip::plUnzip() : fFile(nil) |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
bool plUnzip::Open(const char* filename) |
|
||||||
{ |
|
||||||
fFile = unzOpen(filename); |
|
||||||
return (fFile != nil); |
|
||||||
} |
|
||||||
|
|
||||||
bool plUnzip::Close() |
|
||||||
{ |
|
||||||
bool ret = false; |
|
||||||
|
|
||||||
if (fFile != nil) |
|
||||||
{ |
|
||||||
ret = (UNZ_OK == unzClose(fFile)); |
|
||||||
fFile = nil; |
|
||||||
} |
|
||||||
|
|
||||||
return ret; |
|
||||||
} |
|
||||||
|
|
||||||
void plUnzip::IGetFullPath(const char* destDir, const char* filename, char* outFilename) |
|
||||||
{ |
|
||||||
// Make sure the dest ends with a slash
|
|
||||||
strcpy(outFilename, destDir); |
|
||||||
char lastChar = outFilename[strlen(outFilename)-1]; |
|
||||||
if (lastChar != '\\' && lastChar != '/') |
|
||||||
strcat(outFilename, "\\"); |
|
||||||
|
|
||||||
// Check if the output filename has any directories in it
|
|
||||||
const char* forward = strrchr(filename, '/'); |
|
||||||
const char* backward = strrchr(filename, '\\'); |
|
||||||
|
|
||||||
if (!forward && !backward) |
|
||||||
{ |
|
||||||
CreateDirectory(outFilename, NULL); |
|
||||||
strcat(outFilename, filename); |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
const char* fileOnly = (forward > backward) ? forward+1 : backward+1; |
|
||||||
strncat(outFilename, filename, fileOnly-filename); |
|
||||||
CreateDirectory(outFilename, NULL); |
|
||||||
|
|
||||||
strcat(outFilename, fileOnly); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void plUnzip::IExtractCurrent(const char* destDir, char* fileName) |
|
||||||
{ |
|
||||||
char filename[MAX_PATH]; |
|
||||||
if (unzGetCurrentFileInfo(fFile, nil, filename, sizeof(filename), nil, 0, nil, 0) == UNZ_OK) |
|
||||||
{ |
|
||||||
strcpy(fileName, filename); |
|
||||||
|
|
||||||
if (unzOpenCurrentFile(fFile) == UNZ_OK) |
|
||||||
{ |
|
||||||
char outFilename[MAX_PATH]; |
|
||||||
IGetFullPath(destDir, filename, outFilename); |
|
||||||
|
|
||||||
// Make sure to take off the read-only flag if the file exists, and is RO
|
|
||||||
DWORD attrs = GetFileAttributes(outFilename); |
|
||||||
if (attrs != INVALID_FILE_ATTRIBUTES && (attrs & FILE_ATTRIBUTE_READONLY)) |
|
||||||
SetFileAttributes(outFilename, attrs & ~FILE_ATTRIBUTE_READONLY); |
|
||||||
|
|
||||||
hsUNIXStream outFile; |
|
||||||
if (outFile.Open(outFilename, "wb")) |
|
||||||
{ |
|
||||||
char buf[2048]; |
|
||||||
int numRead; |
|
||||||
while ((numRead = unzReadCurrentFile(fFile, buf, sizeof(buf))) > 0) |
|
||||||
{ |
|
||||||
outFile.Write(numRead, buf); |
|
||||||
} |
|
||||||
|
|
||||||
outFile.Close(); |
|
||||||
|
|
||||||
unz_file_info_s info; |
|
||||||
unzGetCurrentFileInfo(fFile, &info, NULL, 0, NULL, 0, NULL, 0); |
|
||||||
|
|
||||||
SYSTEMTIME sysTime = {0}; |
|
||||||
sysTime.wDay = info.tmu_date.tm_mday; |
|
||||||
sysTime.wMonth = info.tmu_date.tm_mon+1; |
|
||||||
sysTime.wYear = info.tmu_date.tm_year; |
|
||||||
sysTime.wHour = info.tmu_date.tm_hour; |
|
||||||
sysTime.wMinute = info.tmu_date.tm_min; |
|
||||||
sysTime.wSecond = info.tmu_date.tm_sec; |
|
||||||
|
|
||||||
FILETIME localFileTime, utcFileTime; |
|
||||||
SystemTimeToFileTime(&sysTime, &localFileTime); |
|
||||||
|
|
||||||
LocalFileTimeToFileTime(&localFileTime, &utcFileTime); |
|
||||||
|
|
||||||
HANDLE hFile = CreateFile(outFilename, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); |
|
||||||
SetFileTime(hFile, NULL, NULL, &utcFileTime); |
|
||||||
CloseHandle(hFile); |
|
||||||
} |
|
||||||
|
|
||||||
unzCloseCurrentFile(fFile); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void plUnzip::ExtractAll(const char* destDir) |
|
||||||
{ |
|
||||||
if (unzGoToFirstFile(fFile) != UNZ_OK) |
|
||||||
return; |
|
||||||
|
|
||||||
do |
|
||||||
{ |
|
||||||
IExtractCurrent(destDir); |
|
||||||
} |
|
||||||
while (unzGoToNextFile(fFile) == UNZ_OK); |
|
||||||
} |
|
||||||
|
|
||||||
bool plUnzip::ExtractNext(const char* destDir, char* fileName) |
|
||||||
{ |
|
||||||
IExtractCurrent(destDir, fileName); |
|
||||||
return (unzGoToNextFile(fFile) == UNZ_OK); |
|
||||||
} |
|
@ -1,66 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#ifndef plUnzip_h_inc |
|
||||||
#define plUnzip_h_inc |
|
||||||
|
|
||||||
#include "hsTypes.h" |
|
||||||
#include "../src/contrib/minizip/unzip.h" |
|
||||||
|
|
||||||
class plUnzip |
|
||||||
{ |
|
||||||
protected: |
|
||||||
unzFile fFile; |
|
||||||
|
|
||||||
void IGetFullPath(const char* destDir, const char* filename, char* outFilename); |
|
||||||
void IExtractCurrent(const char* destDir, char* fileName=nil); |
|
||||||
|
|
||||||
public: |
|
||||||
plUnzip(); |
|
||||||
|
|
||||||
bool Open(const char* filename); |
|
||||||
bool Close(); |
|
||||||
|
|
||||||
void ExtractAll(const char* destDir); |
|
||||||
bool ExtractNext(const char* destDir, char* fileName); |
|
||||||
}; |
|
||||||
|
|
||||||
#endif // plUnzip_h_inc
|
|
@ -1,30 +0,0 @@ |
|||||||
//{{NO_DEPENDENCIES}}
|
|
||||||
// Microsoft Developer Studio generated include file.
|
|
||||||
// Used by plPlasmaInstaller.rc
|
|
||||||
//
|
|
||||||
#define IDD_INSTALLER 101 |
|
||||||
#define IDI_ICON1 102 |
|
||||||
#define IDC_3DSMAX_EDIT 1000 |
|
||||||
#define IDC_BROWSE_3DSMAX 1001 |
|
||||||
#define IDC_TIME_COMBO 1002 |
|
||||||
#define IDC_CLIENT_EDIT 1003 |
|
||||||
#define IDC_BROWSE_CLIENT 1004 |
|
||||||
#define IDC_GET_BUTTON 1005 |
|
||||||
#define IDC_STATUS_LIST 1006 |
|
||||||
#define IDC_BRANCH_DATE 1007 |
|
||||||
#define IDC_BUILD_COMBO 1008 |
|
||||||
#define IDC_CLIENT_CHECK 1009 |
|
||||||
#define IDC_SCRIPTS_CHECK 1010 |
|
||||||
#define IDC_PLUGINS_CHECK 1011 |
|
||||||
#define IDC_TOOLS_CHECK 1012 |
|
||||||
|
|
||||||
// Next default values for new objects
|
|
||||||
//
|
|
||||||
#ifdef APSTUDIO_INVOKED |
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS |
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 103 |
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40001 |
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1013 |
|
||||||
#define _APS_NEXT_SYMED_VALUE 101 |
|
||||||
#endif |
|
||||||
#endif |
|
Before Width: | Height: | Size: 2.5 KiB |
@ -1,67 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#include "HeadSpin.h" |
|
||||||
#include "plPlasmaUpdate.h" |
|
||||||
#include "jvCoreUtil.h" |
|
||||||
|
|
||||||
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) |
|
||||||
{ |
|
||||||
jvCoreUtil::SetHInstance(hInstance); |
|
||||||
plPlasmaUpdate installer; |
|
||||||
if (!installer.Create()) |
|
||||||
return 0; |
|
||||||
|
|
||||||
if (!stricmp(lpCmdLine, "AutoDownload")) |
|
||||||
installer.SetAutoDownload(); |
|
||||||
|
|
||||||
MSG msg; |
|
||||||
while (GetMessage(&msg, NULL, 0, 0)) |
|
||||||
{ |
|
||||||
if (!jvBaseDlg::IsDialogMessage(&msg)) |
|
||||||
{ |
|
||||||
TranslateMessage(&msg); |
|
||||||
DispatchMessage(&msg); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return 0; |
|
||||||
} |
|
@ -1,186 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#include "plFileGrabber.h" |
|
||||||
|
|
||||||
/* Not needed currently - if we want it again we'll have to reimplement HTTP comm
|
|
||||||
plHttpFileGrabber::plHttpFileGrabber() |
|
||||||
{ |
|
||||||
fRequestMgr.SetHostname(""); |
|
||||||
} |
|
||||||
|
|
||||||
bool plHttpFileGrabber::FileToStream(const char* path, hsStream* stream) |
|
||||||
{ |
|
||||||
std::string pathStr(path); |
|
||||||
bool retVal = fRequestMgr.GetFileToStream(path, stream); |
|
||||||
stream->SetPosition(0); |
|
||||||
|
|
||||||
return retVal; |
|
||||||
} |
|
||||||
|
|
||||||
void plHttpFileGrabber::SetServer(const char* server) |
|
||||||
{ |
|
||||||
std::string serverPath(server); |
|
||||||
|
|
||||||
fRequestMgr.SetHostname(serverPath); |
|
||||||
} |
|
||||||
|
|
||||||
void plHttpFileGrabber::MakeProperPath(char* path) |
|
||||||
{ |
|
||||||
char* slash = NULL; |
|
||||||
do { |
|
||||||
slash = strchr(path, '\\'); |
|
||||||
if (slash) |
|
||||||
*slash = '/'; |
|
||||||
} while(slash != NULL); |
|
||||||
} |
|
||||||
|
|
||||||
void plHttpFileGrabber::SetUsernamePassword(const std::string& username, const std::string& password) |
|
||||||
{ |
|
||||||
fRequestMgr.SetUsername(username); |
|
||||||
fRequestMgr.SetPassword(password); |
|
||||||
} |
|
||||||
|
|
||||||
bool plHttpFileGrabber::IsServerAvailable(const char* serverName) |
|
||||||
{ |
|
||||||
bool retVal = false; |
|
||||||
|
|
||||||
HINTERNET hInternet = InternetOpen("Parable Patcher",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0); |
|
||||||
if (hInternet) |
|
||||||
{ |
|
||||||
HINTERNET hHttp = InternetConnect(hInternet,serverName,8080,fUserName.c_str(),fPassword.c_str(),INTERNET_SERVICE_HTTP,0,0); |
|
||||||
if (hHttp) |
|
||||||
{ |
|
||||||
HINTERNET hRequest = HttpOpenRequest(hHttp, "GET", "/Current/Current.txt", NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_KEEP_CONNECTION, 0); |
|
||||||
if (hRequest) |
|
||||||
{ |
|
||||||
DWORD dwCode; |
|
||||||
DWORD dwSize = sizeof(dwCode); |
|
||||||
HttpSendRequest(hRequest, NULL, 0, NULL, 0); |
|
||||||
HttpQueryInfo(hRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwCode, &dwSize, NULL); |
|
||||||
if (dwCode >= 200 && dwCode < 300) |
|
||||||
{ |
|
||||||
retVal = true; |
|
||||||
} |
|
||||||
|
|
||||||
InternetCloseHandle(hRequest); |
|
||||||
} |
|
||||||
|
|
||||||
InternetCloseHandle(hHttp); |
|
||||||
} |
|
||||||
InternetCloseHandle(hInternet); |
|
||||||
} |
|
||||||
|
|
||||||
return retVal; |
|
||||||
} |
|
||||||
*/ |
|
||||||
|
|
||||||
plNetShareFileGrabber::plNetShareFileGrabber() |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
#define BUFFER_SIZE 1024*1024 |
|
||||||
bool plNetShareFileGrabber::FileToStream(const char* path, hsStream* stream) |
|
||||||
{ |
|
||||||
hsUNIXStream fileStream; |
|
||||||
std::string filePath = fServerName + path; |
|
||||||
|
|
||||||
if (fileStream.Open(filePath.c_str())) |
|
||||||
{ |
|
||||||
char* buffer = new char[BUFFER_SIZE]; |
|
||||||
uint32_t streamSize = fileStream.GetSizeLeft(); |
|
||||||
while (streamSize > (BUFFER_SIZE)) |
|
||||||
{ |
|
||||||
fileStream.Read(BUFFER_SIZE, buffer); |
|
||||||
stream->Write(BUFFER_SIZE, buffer); |
|
||||||
|
|
||||||
streamSize = fileStream.GetSizeLeft(); |
|
||||||
} |
|
||||||
|
|
||||||
if (streamSize > 0) |
|
||||||
{ |
|
||||||
fileStream.Read(streamSize, buffer); |
|
||||||
stream->Write(streamSize, buffer); |
|
||||||
} |
|
||||||
|
|
||||||
stream->Rewind(); |
|
||||||
|
|
||||||
fileStream.Close(); |
|
||||||
delete [] buffer; |
|
||||||
|
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
void plNetShareFileGrabber::SetServer(const char* server) |
|
||||||
{ |
|
||||||
fServerName = "\\\\"; |
|
||||||
fServerName += server; |
|
||||||
} |
|
||||||
|
|
||||||
void plNetShareFileGrabber::MakeProperPath(char* path) |
|
||||||
{ |
|
||||||
char* slash = NULL; |
|
||||||
do { |
|
||||||
slash = strchr(path, '/'); |
|
||||||
if (slash) |
|
||||||
*slash = '\\'; |
|
||||||
} while(slash != NULL); |
|
||||||
} |
|
||||||
|
|
||||||
bool plNetShareFileGrabber::IsServerAvailable(const char* serverName, const char* currentDir) |
|
||||||
{ |
|
||||||
bool retVal = false; |
|
||||||
|
|
||||||
char serverPath[MAX_PATH]; |
|
||||||
sprintf(serverPath, "\\\\%s\\%s\\Current.txt", serverName, currentDir); |
|
||||||
|
|
||||||
hsUNIXStream si; |
|
||||||
if (si.Open(serverPath, "rb")) |
|
||||||
{ |
|
||||||
retVal = true; |
|
||||||
si.Close(); |
|
||||||
} |
|
||||||
|
|
||||||
return retVal; |
|
||||||
} |
|
@ -1,89 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#ifndef plFileGrabber_h_inc |
|
||||||
#define plFileGrabber_h_inc |
|
||||||
|
|
||||||
#include <string> |
|
||||||
#include "hsStream.h" |
|
||||||
|
|
||||||
class plFileGrabber |
|
||||||
{ |
|
||||||
public: |
|
||||||
virtual bool IsServerAvailable(const char* serverName, const char* currentDir) = 0; |
|
||||||
virtual bool FileToStream(const char* path, hsStream* stream) = 0; |
|
||||||
virtual void SetServer(const char* server) = 0; |
|
||||||
virtual void MakeProperPath(char* path) = 0; |
|
||||||
virtual bool NeedsAuth() { return false; } |
|
||||||
virtual void SetUsernamePassword(const std::string& username, const std::string& password) {} |
|
||||||
}; |
|
||||||
|
|
||||||
/* Not needed currently - if we want it again we'll have to reimplement HTTP comm
|
|
||||||
class plHttpFileGrabber : public plFileGrabber |
|
||||||
{ |
|
||||||
private: |
|
||||||
plHttpDiverseRequestMgr fRequestMgr; |
|
||||||
|
|
||||||
public: |
|
||||||
plHttpFileGrabber(); |
|
||||||
virtual bool IsServerAvailable(const char* serverName); |
|
||||||
virtual bool FileToStream(const char* path, hsStream* stream); |
|
||||||
virtual void SetServer(const char* server); |
|
||||||
virtual void MakeProperPath(char* path); |
|
||||||
virtual bool NeedsAuth() { return true; } |
|
||||||
virtual void SetUsernamePassword(const std::string& username, const std::string& password); |
|
||||||
}; |
|
||||||
*/ |
|
||||||
|
|
||||||
class plNetShareFileGrabber : public plFileGrabber |
|
||||||
{ |
|
||||||
private: |
|
||||||
std::string fServerName; |
|
||||||
|
|
||||||
public: |
|
||||||
plNetShareFileGrabber(); |
|
||||||
virtual bool IsServerAvailable(const char* serverName, const char* currentDir); |
|
||||||
virtual bool FileToStream(const char* path, hsStream* stream); |
|
||||||
virtual void SetServer(const char* server); |
|
||||||
virtual void MakeProperPath(char* path); |
|
||||||
}; |
|
||||||
|
|
||||||
#endif |
|
@ -1,361 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#include "HeadSpin.h" |
|
||||||
#include "plManifest.h" |
|
||||||
|
|
||||||
#include "../pnEncryption/plChecksum.h" |
|
||||||
#include "../plCompression/plZlibStream.h" |
|
||||||
#include "../plFile/plEncryptedStream.h" |
|
||||||
#include "../plFile/plFileUtils.h" |
|
||||||
#include "../plUnifiedTime/plUnifiedTime.h" |
|
||||||
|
|
||||||
class plManifestFile |
|
||||||
{ |
|
||||||
public: |
|
||||||
char* fFilename; |
|
||||||
plMD5Checksum fSum; |
|
||||||
plMD5Checksum fLocalSum; |
|
||||||
uint32_t fSize; |
|
||||||
uint32_t fCompressedSize; |
|
||||||
uint32_t fFlags; |
|
||||||
}; |
|
||||||
|
|
||||||
plManifest::plManifest(LogFunc log) : |
|
||||||
fDownloadFiles(0), |
|
||||||
fDownloadBytes(0), |
|
||||||
fDirtySums(false), |
|
||||||
fLog(log) |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
plManifest::~plManifest() |
|
||||||
{ |
|
||||||
if (fDirtySums) |
|
||||||
IWriteCache(); |
|
||||||
|
|
||||||
delete [] fManifestName; |
|
||||||
|
|
||||||
for (int i = 0; i < fFiles.size(); i++) |
|
||||||
{ |
|
||||||
delete [] fFiles[i]->fFilename; |
|
||||||
delete fFiles[i]; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
bool plManifest::Read(hsStream* mfsStream, const char* basePath, const char* mfsName) |
|
||||||
{ |
|
||||||
fBasePath = basePath; |
|
||||||
fManifestName = hsStrcpy(mfsName); |
|
||||||
|
|
||||||
fLog("--- Reading manifest for %s", fManifestName); |
|
||||||
|
|
||||||
char buf[256]; |
|
||||||
while (mfsStream->ReadLn(buf, sizeof(buf))) |
|
||||||
{ |
|
||||||
plManifestFile* file = new plManifestFile; |
|
||||||
|
|
||||||
char* tok = strtok(buf, "\t"); |
|
||||||
file->fFilename = hsStrcpy(tok); |
|
||||||
|
|
||||||
tok = strtok(nil, "\t"); |
|
||||||
file->fSum.SetFromHexString(tok); |
|
||||||
|
|
||||||
tok = strtok(nil, "\t"); |
|
||||||
file->fSize = atoi(tok); |
|
||||||
|
|
||||||
tok = strtok(nil, "\t"); |
|
||||||
file->fCompressedSize = atoi(tok); |
|
||||||
|
|
||||||
tok = strtok(nil, "\t"); |
|
||||||
file->fFlags = atoi(tok); |
|
||||||
|
|
||||||
fFiles.push_back(file); |
|
||||||
} |
|
||||||
|
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
void plManifest::ValidateFiles(ProgressFunc progress) |
|
||||||
{ |
|
||||||
if (fFiles.empty()) |
|
||||||
return; |
|
||||||
|
|
||||||
fLog("--- Validating files for %s", fManifestName); |
|
||||||
|
|
||||||
IReadCache(progress); |
|
||||||
|
|
||||||
fDownloadFiles = 0; |
|
||||||
fDownloadBytes = 0; |
|
||||||
|
|
||||||
for (int i = 0; i < fFiles.size(); i++) |
|
||||||
{ |
|
||||||
plManifestFile* file = fFiles[i]; |
|
||||||
|
|
||||||
// If the local checksum is invalid, this file wasn't in our cache.
|
|
||||||
// Get the sum, and update the progress bar.
|
|
||||||
if (!file->fLocalSum.IsValid()) |
|
||||||
{ |
|
||||||
fLog(" No sum for %s, calculating", file->fFilename); |
|
||||||
file->fLocalSum.CalcFromFile(file->fFilename); |
|
||||||
fDirtySums = true; |
|
||||||
progress(file->fFilename, 1); |
|
||||||
} |
|
||||||
|
|
||||||
if (file->fLocalSum != file->fSum) |
|
||||||
{ |
|
||||||
fLog(" Incorrect sum for %s", file->fFilename); |
|
||||||
fDownloadFiles++; |
|
||||||
fDownloadBytes += file->fCompressedSize; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
fLog("--- Need to download %d files, %.1f MB", fDownloadFiles, float(fDownloadBytes) / (1024.f*1024.f)); |
|
||||||
} |
|
||||||
|
|
||||||
void plManifest::DownloadUpdates(ProgressFunc progress, plFileGrabber* grabber) |
|
||||||
{ |
|
||||||
for (int i = 0; i < fFiles.size(); i++) |
|
||||||
{ |
|
||||||
plManifestFile* file = fFiles[i]; |
|
||||||
if (file->fLocalSum != file->fSum) |
|
||||||
{ |
|
||||||
char serverPath[MAX_PATH]; |
|
||||||
|
|
||||||
sprintf(serverPath, "%s%s.gz", fBasePath.c_str(), file->fFilename); |
|
||||||
grabber->MakeProperPath(serverPath); |
|
||||||
|
|
||||||
hsRAMStream serverStream; |
|
||||||
if (grabber->FileToStream(serverPath, &serverStream)) |
|
||||||
{ |
|
||||||
plFileUtils::EnsureFilePathExists(file->fFilename); |
|
||||||
|
|
||||||
plFileUtils::RemoveFile(file->fFilename, true); |
|
||||||
|
|
||||||
plZlibStream localStream; |
|
||||||
if (localStream.Open(file->fFilename, "wb")) |
|
||||||
{ |
|
||||||
char dataBuf[1024]; |
|
||||||
uint32_t sizeLeft = serverStream.GetSizeLeft(); |
|
||||||
while (uint32_t amtRead = serverStream.Read( (sizeof(dataBuf) > sizeLeft) ? sizeLeft : sizeof(dataBuf), dataBuf)) |
|
||||||
{ |
|
||||||
progress(file->fFilename, amtRead); |
|
||||||
|
|
||||||
localStream.Write(amtRead, dataBuf); |
|
||||||
sizeLeft = serverStream.GetSizeLeft(); |
|
||||||
} |
|
||||||
|
|
||||||
localStream.Close(); |
|
||||||
|
|
||||||
// FIXME - Should we recalc this?
|
|
||||||
file->fLocalSum = file->fSum; |
|
||||||
fDirtySums = true; |
|
||||||
|
|
||||||
if (file->fFlags != 0) |
|
||||||
IDecompressSound(file); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
plManifestFile* plManifest::IFindFile(const char* name) |
|
||||||
{ |
|
||||||
// FIXME
|
|
||||||
for (int i = 0; i < fFiles.size(); i++) |
|
||||||
{ |
|
||||||
if (hsStrEQ(fFiles[i]->fFilename, name)) |
|
||||||
return fFiles[i]; |
|
||||||
} |
|
||||||
|
|
||||||
return nil; |
|
||||||
} |
|
||||||
|
|
||||||
// KLUDGE - Put age checksums in the dat dir, for backwards compatability
|
|
||||||
const char* plManifest::IGetCacheDir() |
|
||||||
{ |
|
||||||
const char* prefix = ""; |
|
||||||
if (strncmp(fFiles[0]->fFilename, "dat\\", strlen("dat\\")) == 0) |
|
||||||
return "dat\\"; |
|
||||||
else |
|
||||||
return ""; |
|
||||||
} |
|
||||||
|
|
||||||
#define kCacheFileVersion 1 |
|
||||||
|
|
||||||
void plManifest::IWriteCache() |
|
||||||
{ |
|
||||||
plEncryptedStream s; |
|
||||||
|
|
||||||
bool openedFile = false; |
|
||||||
|
|
||||||
uint32_t numFiles = 0; |
|
||||||
for (int i = 0; i < fFiles.size(); i++) |
|
||||||
{ |
|
||||||
plManifestFile* file = fFiles[i]; |
|
||||||
|
|
||||||
plUnifiedTime modifiedTime; |
|
||||||
if (file->fLocalSum.IsValid() && |
|
||||||
plFileUtils::GetFileTimes(file->fFilename, nil, &modifiedTime)) |
|
||||||
{ |
|
||||||
if (!openedFile) |
|
||||||
{ |
|
||||||
openedFile = true; |
|
||||||
char buf[256]; |
|
||||||
sprintf(buf, "%s%s.sum", IGetCacheDir(), fManifestName); |
|
||||||
s.Open(buf, "wb"); |
|
||||||
s.WriteSwap32(0); |
|
||||||
s.WriteSwap32(kCacheFileVersion); |
|
||||||
} |
|
||||||
|
|
||||||
s.WriteSafeString(file->fFilename); |
|
||||||
|
|
||||||
plMD5Checksum& checksum = file->fLocalSum; |
|
||||||
s.Write(checksum.GetSize(), checksum.GetValue()); |
|
||||||
|
|
||||||
modifiedTime.Write(&s); |
|
||||||
|
|
||||||
numFiles++; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (openedFile) |
|
||||||
{ |
|
||||||
s.Rewind(); |
|
||||||
s.WriteSwap32(numFiles); |
|
||||||
|
|
||||||
s.Close(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void plManifest::IReadCache(ProgressFunc progress) |
|
||||||
{ |
|
||||||
//
|
|
||||||
// Load valid cached checksums
|
|
||||||
//
|
|
||||||
char buf[256]; |
|
||||||
sprintf(buf, "%s%s.sum", IGetCacheDir(), fManifestName); |
|
||||||
hsStream* s = plEncryptedStream::OpenEncryptedFile(buf); |
|
||||||
|
|
||||||
if (s) |
|
||||||
{ |
|
||||||
uint32_t numCached = s->ReadSwap32(); |
|
||||||
uint32_t cacheFileVersion = s->ReadSwap32(); |
|
||||||
|
|
||||||
if (cacheFileVersion != kCacheFileVersion) |
|
||||||
{ |
|
||||||
s->Close(); |
|
||||||
delete s; |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
fLog(" Reading cache...found %d cached sums", numCached); |
|
||||||
|
|
||||||
for (int i = 0; i < numCached; i++) |
|
||||||
{ |
|
||||||
char* name = s->ReadSafeString(); |
|
||||||
|
|
||||||
uint8_t checksumBuf[MD5_DIGEST_LENGTH]; |
|
||||||
s->Read(sizeof(checksumBuf), checksumBuf); |
|
||||||
plMD5Checksum checksum; |
|
||||||
checksum.SetValue(checksumBuf); |
|
||||||
|
|
||||||
plUnifiedTime modifiedTime; |
|
||||||
modifiedTime.Read(s); |
|
||||||
|
|
||||||
plManifestFile* file = IFindFile(name); |
|
||||||
if (file) |
|
||||||
{ |
|
||||||
plUnifiedTime curModifiedTime; |
|
||||||
if (plFileUtils::GetFileTimes(file->fFilename, nil, &curModifiedTime)) |
|
||||||
{ |
|
||||||
if (curModifiedTime == modifiedTime) |
|
||||||
file->fLocalSum = checksum; |
|
||||||
else |
|
||||||
fLog(" Invalid modified time for %s", name); |
|
||||||
} |
|
||||||
else |
|
||||||
fLog(" Couldn't get modified time for %s", name); |
|
||||||
|
|
||||||
progress(file->fFilename, 1); |
|
||||||
} |
|
||||||
else |
|
||||||
fLog(" Couldn't find cached file '%s' in manifest, discarding", name); |
|
||||||
|
|
||||||
|
|
||||||
delete [] name; |
|
||||||
} |
|
||||||
|
|
||||||
s->Close(); |
|
||||||
delete s; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
#include "../plAudioCore/plAudioFileReader.h" |
|
||||||
#include "../plAudio/plOGGCodec.h" |
|
||||||
#include "../plAudio/plWavFile.h" |
|
||||||
|
|
||||||
|
|
||||||
bool plManifest::IDecompressSound(plManifestFile* file) |
|
||||||
{ |
|
||||||
enum
|
|
||||||
{ |
|
||||||
kSndFlagCacheSplit = 1<<0, |
|
||||||
kSndFlagCacheStereo = 1<<2, |
|
||||||
}; |
|
||||||
|
|
||||||
if (hsCheckBits(file->fFlags, kSndFlagCacheSplit) || |
|
||||||
hsCheckBits(file->fFlags, kSndFlagCacheStereo)) |
|
||||||
{ |
|
||||||
plAudioFileReader* reader = plAudioFileReader::CreateReader(file->fFilename, plAudioCore::kAll, plAudioFileReader::kStreamNative); |
|
||||||
if (!reader) |
|
||||||
return false; |
|
||||||
uint32_t size = reader->GetDataSize(); |
|
||||||
delete reader; |
|
||||||
|
|
||||||
if (hsCheckBits(file->fFlags, kSndFlagCacheSplit)) |
|
||||||
plAudioFileReader::CacheFile(file->fFilename, true); |
|
||||||
if (hsCheckBits(file->fFlags, kSndFlagCacheStereo)) |
|
||||||
plAudioFileReader::CacheFile(file->fFilename, false); |
|
||||||
} |
|
||||||
|
|
||||||
return true; |
|
||||||
} |
|
@ -1,93 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#ifndef plManifest_h_inc |
|
||||||
#define plManifest_h_inc |
|
||||||
|
|
||||||
#include "HeadSpin.h" |
|
||||||
#include "plFileGrabber.h" |
|
||||||
#include <vector> |
|
||||||
#include <string> |
|
||||||
|
|
||||||
class plManifestFile; |
|
||||||
|
|
||||||
typedef void (*ProgressFunc)(const char* name, int progDelta); |
|
||||||
typedef void (*LogFunc)(const char* format, ...); |
|
||||||
|
|
||||||
class plManifest |
|
||||||
{ |
|
||||||
protected: |
|
||||||
std::string fBasePath; |
|
||||||
char* fManifestName; |
|
||||||
|
|
||||||
typedef std::vector<plManifestFile*> FileVec; |
|
||||||
FileVec fFiles; |
|
||||||
|
|
||||||
uint32_t fDownloadFiles; |
|
||||||
uint32_t fDownloadBytes; |
|
||||||
|
|
||||||
bool fDirtySums; |
|
||||||
|
|
||||||
LogFunc fLog; |
|
||||||
|
|
||||||
bool IDecompressSound(plManifestFile* file); |
|
||||||
|
|
||||||
plManifestFile* IFindFile(const char* name); |
|
||||||
|
|
||||||
const char* IGetCacheDir(); |
|
||||||
void IReadCache(ProgressFunc progress); |
|
||||||
void IWriteCache(); |
|
||||||
|
|
||||||
public: |
|
||||||
plManifest(LogFunc log); |
|
||||||
~plManifest(); |
|
||||||
|
|
||||||
bool Read(hsStream* mfsStream, const char* basePath, const char* mfsName); |
|
||||||
|
|
||||||
void ValidateFiles(ProgressFunc progress); |
|
||||||
void DownloadUpdates(ProgressFunc progress, plFileGrabber* grabber); |
|
||||||
|
|
||||||
int NumFiles() { return fFiles.size(); } |
|
||||||
uint32_t NumDownloadFiles() { return fDownloadFiles; } |
|
||||||
uint32_t DownloadSize() { return fDownloadBytes; } |
|
||||||
}; |
|
||||||
|
|
||||||
#endif // plManifest_h_inc
|
|
@ -1,94 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#include "plPlasmaServers.h" |
|
||||||
#include "hsStream.h" |
|
||||||
|
|
||||||
bool plPlasmaServers::GetServerInfo() |
|
||||||
{ |
|
||||||
bool ret = true; |
|
||||||
|
|
||||||
hsUNIXStream si; |
|
||||||
if (si.Open("\\\\dirtcake\\ServerInfo\\ServerInfo.txt", "rb")) |
|
||||||
{ |
|
||||||
char line[256]; |
|
||||||
|
|
||||||
// Make sure we've got the latest version
|
|
||||||
if (si.ReadLn(line, sizeof(line))) |
|
||||||
{ |
|
||||||
int version = atoi(line); |
|
||||||
si.ReadLn(line, sizeof(line)); |
|
||||||
if (version != 4) |
|
||||||
{ |
|
||||||
char errorMsg[512]; |
|
||||||
sprintf(errorMsg, "This installer is out of date.\nPlease get the latest version from:\n\n%s", line); |
|
||||||
hsMessageBox(errorMsg, "Error", hsMessageBoxNormal, hsMessageBoxIconError); |
|
||||||
ret = false; |
|
||||||
} |
|
||||||
} |
|
||||||
else |
|
||||||
ret = false; |
|
||||||
|
|
||||||
// Read in the servers, one per line
|
|
||||||
while (ret && si.ReadLn(line, sizeof(line))) |
|
||||||
{ |
|
||||||
ServerInfo info; |
|
||||||
|
|
||||||
info.fServerAddress = strtok(line, ","); |
|
||||||
info.fServerName = strtok(nil, ","); |
|
||||||
info.fURLBase = strtok(nil, ","); |
|
||||||
info.fOutputDir = strtok(nil, ","); |
|
||||||
info.fCurrentDir = strtok(nil, ","); |
|
||||||
info.fCodeDir = strtok(nil, ","); |
|
||||||
|
|
||||||
fServers.push_back(info); |
|
||||||
} |
|
||||||
|
|
||||||
si.Close(); |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
hsMessageBox("Couldn't find server info", "Error", hsMessageBoxNormal, hsMessageBoxIconError); |
|
||||||
ret = false; |
|
||||||
} |
|
||||||
|
|
||||||
return ret; |
|
||||||
} |
|
@ -1,75 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#ifndef plPlasmaServers_h_inc |
|
||||||
#define plPlasmaServers_h_inc |
|
||||||
|
|
||||||
#include "HeadSpin.h" |
|
||||||
#include <vector> |
|
||||||
|
|
||||||
class plPlasmaServers |
|
||||||
{ |
|
||||||
protected: |
|
||||||
class ServerInfo |
|
||||||
{ |
|
||||||
public: |
|
||||||
std::string fServerAddress; |
|
||||||
std::string fServerName; |
|
||||||
std::string fURLBase; |
|
||||||
std::string fOutputDir; |
|
||||||
std::string fCurrentDir; |
|
||||||
std::string fCodeDir; |
|
||||||
}; |
|
||||||
std::vector<ServerInfo> fServers; |
|
||||||
|
|
||||||
public: |
|
||||||
bool GetServerInfo(); |
|
||||||
|
|
||||||
int GetNumServers() { return fServers.size(); } |
|
||||||
std::string& GetServerAddress(int i) { return fServers[i].fServerAddress; } |
|
||||||
std::string& GetServerName(int i) { return fServers[i].fServerName; } |
|
||||||
std::string& GetServerURLBase(int i) { return fServers[i].fURLBase; } |
|
||||||
std::string& GetServerOutputDir(int i) { return fServers[i].fOutputDir; } |
|
||||||
std::string& GetServerCurrentDir(int i) { return fServers[i].fCurrentDir; } |
|
||||||
std::string& GetServerCodeDir(int i) { return fServers[i].fCodeDir; } |
|
||||||
}; |
|
||||||
|
|
||||||
#endif // plPlasmaServers_h_inc
|
|
@ -1,514 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#include "HeadSpin.h" |
|
||||||
#include "plPlasmaUpdate.h" |
|
||||||
#include "resource.h" |
|
||||||
#include <windowsx.h> |
|
||||||
#include <commctrl.h> |
|
||||||
#include <direct.h> |
|
||||||
#include "jvCoreUtil.h" |
|
||||||
#include "jvDialogResizer.h" |
|
||||||
|
|
||||||
#include "hsTypes.h" |
|
||||||
#include "../plFile/plFileUtils.h" |
|
||||||
#include "../plUnifiedTime/plUnifiedTime.h" |
|
||||||
#include "hsStream.h" |
|
||||||
#include "plManifest.h" |
|
||||||
#include "../plStatusLog/plStatusLog.h" |
|
||||||
|
|
||||||
static plPlasmaUpdate* gInst = nil; |
|
||||||
|
|
||||||
#define WM_UPDATE_SERVER WM_APP+1 |
|
||||||
|
|
||||||
std::string plPlasmaUpdate::fUserName = "dataserver"; |
|
||||||
std::string plPlasmaUpdate::fPassword = "parabledata"; |
|
||||||
|
|
||||||
plPlasmaUpdate::plPlasmaUpdate() : fCanExit(true), fProgressType(kValidating), fResizer(nil), fAutoDownload(false) |
|
||||||
{ |
|
||||||
INITCOMMONCONTROLSEX icc = {0}; |
|
||||||
icc.dwSize = sizeof(INITCOMMONCONTROLSEX); |
|
||||||
icc.dwICC = ICC_PROGRESS_CLASS; |
|
||||||
InitCommonControlsEx(&icc); |
|
||||||
gInst = this; |
|
||||||
|
|
||||||
_getcwd(fIniPath, sizeof(fIniPath)); |
|
||||||
char lastChar = fIniPath[strlen(fIniPath)]; |
|
||||||
if (lastChar != '\\' && lastChar != '/') |
|
||||||
strcat(fIniPath, "\\"); |
|
||||||
strcat(fIniPath, "ParableUpdate.ini"); |
|
||||||
|
|
||||||
fFileGrabber = new plNetShareFileGrabber; |
|
||||||
} |
|
||||||
|
|
||||||
plPlasmaUpdate::~plPlasmaUpdate() |
|
||||||
{ |
|
||||||
delete fResizer; |
|
||||||
if (fFileGrabber) |
|
||||||
delete fFileGrabber; |
|
||||||
} |
|
||||||
|
|
||||||
bool plPlasmaUpdate::Create() |
|
||||||
{ |
|
||||||
if (!fServers.GetServerInfo()) |
|
||||||
return false; |
|
||||||
|
|
||||||
ICreateDialog(IDD_UPDATE, NULL); |
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
BOOL CALLBACK plPlasmaUpdate::ILoginWinProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) |
|
||||||
{ |
|
||||||
switch( msg ) |
|
||||||
{ |
|
||||||
case WM_INITDIALOG: |
|
||||||
SetFocus(GetDlgItem(hDlg, IDC_USERNAME)); |
|
||||||
break; |
|
||||||
case WM_COMMAND: |
|
||||||
if (HIWORD(wParam) == BN_CLICKED && (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)) |
|
||||||
{ |
|
||||||
bool ok = (LOWORD(wParam) == IDOK); |
|
||||||
if (ok) |
|
||||||
{ |
|
||||||
char username[25]; |
|
||||||
char password[25]; |
|
||||||
|
|
||||||
GetDlgItemText(hDlg, IDC_USERNAME, username, 25); |
|
||||||
GetDlgItemText(hDlg, IDC_PASSWORD, password, 25); |
|
||||||
|
|
||||||
fUserName = username; |
|
||||||
hsAssert(false, "who uses this program?"); |
|
||||||
// plChallengeResponse::HashPassword(password, fPassword);
|
|
||||||
} |
|
||||||
EndDialog(hDlg, ok); |
|
||||||
return TRUE; |
|
||||||
} |
|
||||||
break; |
|
||||||
} |
|
||||||
return FALSE; |
|
||||||
} |
|
||||||
|
|
||||||
void plPlasmaUpdate::IInit() |
|
||||||
{ |
|
||||||
char curServerAddress[256]; |
|
||||||
GetPrivateProfileString("PlasmaUpdate", "ServerAddress", "", curServerAddress, sizeof(curServerAddress), fIniPath); |
|
||||||
bool external = (GetPrivateProfileInt("PlasmaUpdate", "External", 0, fIniPath) != 0); |
|
||||||
|
|
||||||
HWND hCombo = GetDlgItem(fDlg, IDC_BUILD_COMBO); |
|
||||||
|
|
||||||
for (int i = 0; i < fServers.GetNumServers(); i++) |
|
||||||
{ |
|
||||||
std::string& serverAddress = fServers.GetServerAddress(i); |
|
||||||
std::string& serverName = fServers.GetServerName(i); |
|
||||||
std::string& currentDir = fServers.GetServerCurrentDir(i); |
|
||||||
|
|
||||||
if (!fFileGrabber->IsServerAvailable(serverAddress.c_str(), currentDir.c_str())) |
|
||||||
continue; |
|
||||||
|
|
||||||
bool thisServer = (serverAddress == curServerAddress); |
|
||||||
|
|
||||||
int idx = ComboBox_AddString(hCombo, serverName.c_str()); |
|
||||||
ComboBox_SetItemData(hCombo, idx, MAKELPARAM(i, 0)); |
|
||||||
if (thisServer && !external) |
|
||||||
ComboBox_SetCurSel(hCombo, idx); |
|
||||||
|
|
||||||
std::string extName = serverName + " (External)"; |
|
||||||
idx = ComboBox_AddString(hCombo, extName.c_str()); |
|
||||||
ComboBox_SetItemData(hCombo, idx, MAKELPARAM(i, 1)); |
|
||||||
if (thisServer && external) |
|
||||||
ComboBox_SetCurSel(hCombo, idx); |
|
||||||
} |
|
||||||
|
|
||||||
if (ComboBox_GetCurSel(hCombo) == -1) |
|
||||||
ComboBox_SetCurSel(hCombo, 0); |
|
||||||
|
|
||||||
SendMessage(fDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(jvCoreUtil::GetHInstance(), MAKEINTRESOURCE(IDI_ICON))); |
|
||||||
SendMessage(fDlg, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(jvCoreUtil::GetHInstance(), MAKEINTRESOURCE(IDI_ICON))); |
|
||||||
|
|
||||||
fResizer = new jvDialogResizer(fDlg); |
|
||||||
fResizer->AddControl(IDC_BUILD_COMBO, jvDialogResizer::kResizeX); |
|
||||||
fResizer->AddControl(IDC_STATUS_LIST, jvDialogResizer::kResizeX | jvDialogResizer::kResizeY); |
|
||||||
fResizer->AddControl(IDC_PROGRESS, jvDialogResizer::kLockBottom | jvDialogResizer::kResizeX); |
|
||||||
fResizer->AddControl(IDC_DL_TEXT, jvDialogResizer::kLockBottom | jvDialogResizer::kResizeX); |
|
||||||
fResizer->AddControl(IDC_DL_BUTTON, jvDialogResizer::kLockBottom | jvDialogResizer::kCenterX); |
|
||||||
fResizer->SetSize(360, 320); |
|
||||||
fResizer->LoadPosAndSize("PlasmaUpdate"); |
|
||||||
|
|
||||||
bool goTime = true; |
|
||||||
if (fFileGrabber->NeedsAuth()) |
|
||||||
{ |
|
||||||
/*
|
|
||||||
if (!DialogBox(NULL, MAKEINTRESOURCE(IDD_PLASMAUPDATE_LOGIN), fDlg, ILoginWinProc)) |
|
||||||
goTime = false; |
|
||||||
else |
|
||||||
*/ |
|
||||||
fFileGrabber->SetUsernamePassword(fUserName, fPassword); |
|
||||||
} |
|
||||||
|
|
||||||
if (goTime) |
|
||||||
{ |
|
||||||
ShowWindow(fDlg, SW_SHOW); |
|
||||||
PostMessage(fDlg, WM_UPDATE_SERVER, 0, 0); |
|
||||||
} |
|
||||||
else |
|
||||||
PostQuitMessage(0); |
|
||||||
} |
|
||||||
|
|
||||||
void plPlasmaUpdate::IShutdown() |
|
||||||
{ |
|
||||||
fResizer->SavePosAndSize("PlasmaUpdate"); |
|
||||||
delete fResizer; |
|
||||||
fResizer = NULL; |
|
||||||
|
|
||||||
IDeleteManifests(); |
|
||||||
} |
|
||||||
|
|
||||||
void plPlasmaUpdate::IEnableCtrls(bool enable) |
|
||||||
{ |
|
||||||
fCanExit = enable; |
|
||||||
EnableWindow(GetDlgItem(fDlg, IDC_BUILD_COMBO), enable); |
|
||||||
|
|
||||||
HWND hDlButton = GetDlgItem(fDlg, IDC_DL_BUTTON); |
|
||||||
|
|
||||||
if (fManifests.empty()) |
|
||||||
SetWindowText(hDlButton, "Close"); |
|
||||||
else |
|
||||||
SetWindowText(hDlButton, "Download"); |
|
||||||
|
|
||||||
EnableWindow(hDlButton, enable); |
|
||||||
|
|
||||||
if (enable) |
|
||||||
SetFocus(hDlButton); |
|
||||||
} |
|
||||||
|
|
||||||
void plPlasmaUpdate::IDeleteManifests() |
|
||||||
{ |
|
||||||
for (int i = 0; i < fManifests.size(); i++) |
|
||||||
delete fManifests[i]; |
|
||||||
fManifests.clear(); |
|
||||||
} |
|
||||||
|
|
||||||
bool plPlasmaUpdate::IGetManifests(const char* serverRoot, bool external) |
|
||||||
{ |
|
||||||
IDeleteManifests(); |
|
||||||
|
|
||||||
char filePath[MAX_PATH]; |
|
||||||
sprintf(filePath, "%sCurrent.txt", serverRoot); |
|
||||||
|
|
||||||
enum Sections |
|
||||||
{ |
|
||||||
kVersion, |
|
||||||
kInternal, |
|
||||||
kExternal, |
|
||||||
kAll |
|
||||||
}; |
|
||||||
int curSection = kVersion; |
|
||||||
|
|
||||||
hsRAMStream s; |
|
||||||
hsRAMStream manifestStream; |
|
||||||
|
|
||||||
if (fFileGrabber->FileToStream(filePath, &s)) |
|
||||||
{ |
|
||||||
char buf[256]; |
|
||||||
while (s.ReadLn(buf, sizeof(buf))) |
|
||||||
{ |
|
||||||
if (buf[0] == '[') |
|
||||||
{ |
|
||||||
if (hsStrEQ(buf, "[Version]")) |
|
||||||
curSection = kVersion; |
|
||||||
else if (hsStrEQ(buf, "[Internal]")) |
|
||||||
curSection = kInternal; |
|
||||||
else if (hsStrEQ(buf, "[External]")) |
|
||||||
curSection = kExternal; |
|
||||||
else if (hsStrEQ(buf, "[All]")) |
|
||||||
curSection = kAll; |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
if (curSection == kVersion) |
|
||||||
{ |
|
||||||
int version = atoi(buf); |
|
||||||
if (version != 1) |
|
||||||
{ |
|
||||||
hsMessageBox("Your copy of PlasmaUpdate is out of date.\nPlease get the latest version.", "Error", hsMessageBoxNormal, hsMessageBoxIconError); |
|
||||||
return false; |
|
||||||
} |
|
||||||
} |
|
||||||
else if ((!external && curSection == kInternal) |
|
||||||
|| (external && curSection == kExternal) |
|
||||||
|| curSection == kAll) |
|
||||||
{ |
|
||||||
//if (curSection == kAll && !(!strcmp(buf, "Data\\Movies.mfs") || !strcmp(buf, "Data\\Sounds.mfs")))
|
|
||||||
// continue;
|
|
||||||
|
|
||||||
sprintf(filePath, "%s%s", serverRoot, buf); |
|
||||||
|
|
||||||
fFileGrabber->MakeProperPath(filePath); |
|
||||||
|
|
||||||
manifestStream.Reset(); |
|
||||||
fFileGrabber->FileToStream(filePath, &manifestStream); |
|
||||||
|
|
||||||
plFileUtils::StripFile(filePath); |
|
||||||
|
|
||||||
plManifest* manifest = new plManifest(ILog); |
|
||||||
manifest->Read(&manifestStream, filePath, buf); |
|
||||||
fManifests.push_back(manifest); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
void plPlasmaUpdate::IUpdateServer() |
|
||||||
{ |
|
||||||
char buf[256]; |
|
||||||
|
|
||||||
IEnableCtrls(false); |
|
||||||
|
|
||||||
SetDlgItemText(fDlg, IDC_DL_TEXT, "Checking for updates..."); |
|
||||||
|
|
||||||
//
|
|
||||||
// Figure out what server we're checking
|
|
||||||
//
|
|
||||||
bool external = false; |
|
||||||
char serverRoot[MAX_PATH]; |
|
||||||
|
|
||||||
{ |
|
||||||
HWND hCombo = GetDlgItem(fDlg, IDC_BUILD_COMBO); |
|
||||||
int idx = ComboBox_GetCurSel(hCombo); |
|
||||||
LPARAM data = ComboBox_GetItemData(hCombo, idx); |
|
||||||
int server = LOWORD(data); |
|
||||||
external = (HIWORD(data) != 0); |
|
||||||
|
|
||||||
sprintf(serverRoot, "/%s/", fServers.GetServerCurrentDir(server).c_str()); |
|
||||||
const char* serverName = fServers.GetServerAddress(server).c_str(); |
|
||||||
|
|
||||||
ILog("===== Server set to %s %s =====", serverName, external ? "external" : "internal"); |
|
||||||
|
|
||||||
WritePrivateProfileString("PlasmaUpdate", "ServerAddress", serverName, fIniPath); |
|
||||||
WritePrivateProfileString("PlasmaUpdate", "External", external ? "1" : "0", fIniPath); |
|
||||||
|
|
||||||
fFileGrabber->SetServer(serverName); |
|
||||||
} |
|
||||||
|
|
||||||
//
|
|
||||||
// Get the latest publish notes
|
|
||||||
//
|
|
||||||
{ |
|
||||||
HWND hList = GetDlgItem(fDlg, IDC_STATUS_LIST); |
|
||||||
ListBox_ResetContent(hList); |
|
||||||
|
|
||||||
char updateFile[MAX_PATH]; |
|
||||||
if (external) |
|
||||||
sprintf(updateFile, "%sUpdates-External.txt", serverRoot); |
|
||||||
else |
|
||||||
sprintf(updateFile, "%sUpdates-Internal.txt", serverRoot); |
|
||||||
|
|
||||||
hsRAMStream updates; |
|
||||||
fFileGrabber->MakeProperPath(updateFile); |
|
||||||
if (fFileGrabber->FileToStream(updateFile, &updates)) |
|
||||||
{ |
|
||||||
while (updates.ReadLn(buf, sizeof(buf))) |
|
||||||
ListBox_InsertString(hList, 0, buf); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
//
|
|
||||||
// Get the manifests
|
|
||||||
//
|
|
||||||
bool gotManifests = IGetManifests(serverRoot, external); |
|
||||||
uint32_t dlSize = 0; |
|
||||||
|
|
||||||
fProgressType = kValidating; |
|
||||||
|
|
||||||
if (gotManifests) |
|
||||||
{ |
|
||||||
int i; |
|
||||||
|
|
||||||
uint32_t numFiles = 0; |
|
||||||
for (i = 0; i < fManifests.size(); i++) |
|
||||||
numFiles += fManifests[i]->NumFiles(); |
|
||||||
|
|
||||||
HWND hProgress = GetDlgItem(fDlg, IDC_PROGRESS); |
|
||||||
SendMessage(hProgress, PBM_SETRANGE32, 0, numFiles); |
|
||||||
|
|
||||||
for (i = 0; i < fManifests.size(); i++) |
|
||||||
{ |
|
||||||
fManifests[i]->ValidateFiles(ProgressFunc); |
|
||||||
dlSize += fManifests[i]->DownloadSize(); |
|
||||||
} |
|
||||||
|
|
||||||
SendMessage(hProgress, PBM_SETPOS, 0, 0); |
|
||||||
} |
|
||||||
|
|
||||||
// Print how many megs there are to download
|
|
||||||
if (dlSize == 0) |
|
||||||
{ |
|
||||||
strcpy(buf, "No updates to download"); |
|
||||||
IDeleteManifests(); |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
float dlMegs = float(dlSize) / (1024.f*1024.f); |
|
||||||
if (dlMegs < .1) |
|
||||||
dlMegs = .1; |
|
||||||
sprintf(buf, "%.1f MB of updates to download", dlMegs); |
|
||||||
} |
|
||||||
SetDlgItemText(fDlg, IDC_DL_TEXT, buf); |
|
||||||
|
|
||||||
IEnableCtrls(true); |
|
||||||
|
|
||||||
if (fAutoDownload) |
|
||||||
PostMessage(fDlg, WM_COMMAND, MAKEWPARAM(IDC_DL_BUTTON, BN_CLICKED), LPARAM(GetDlgItem(fDlg, IDC_DL_BUTTON))); |
|
||||||
} |
|
||||||
|
|
||||||
void plPlasmaUpdate::IDownloadUpdates() |
|
||||||
{ |
|
||||||
fProgressType = kDownloading; |
|
||||||
|
|
||||||
IEnableCtrls(false); |
|
||||||
|
|
||||||
int i; |
|
||||||
|
|
||||||
uint32_t dlSize = 0; |
|
||||||
for (i = 0; i < fManifests.size(); i++) |
|
||||||
dlSize += fManifests[i]->DownloadSize(); |
|
||||||
|
|
||||||
HWND hProgress = GetDlgItem(fDlg, IDC_PROGRESS); |
|
||||||
SendMessage(hProgress, PBM_SETRANGE32, 0, dlSize); |
|
||||||
|
|
||||||
for (i = 0; i < fManifests.size(); i++) |
|
||||||
fManifests[i]->DownloadUpdates(ProgressFunc, fFileGrabber); |
|
||||||
|
|
||||||
SendMessage(hProgress, PBM_SETPOS, 0, 0); |
|
||||||
|
|
||||||
EnableWindow(GetDlgItem(fDlg, IDC_DL_BUTTON), false); |
|
||||||
SetDlgItemText(fDlg, IDC_DL_TEXT, "No updates to download"); |
|
||||||
|
|
||||||
IDeleteManifests(); |
|
||||||
|
|
||||||
IEnableCtrls(true); |
|
||||||
|
|
||||||
if (fAutoDownload) |
|
||||||
PostMessage(fDlg, WM_COMMAND, MAKEWPARAM(IDC_DL_BUTTON, BN_CLICKED), LPARAM(GetDlgItem(fDlg, IDC_DL_BUTTON))); |
|
||||||
} |
|
||||||
|
|
||||||
void plPlasmaUpdate::ProgressFunc(const char* name, int delta) |
|
||||||
{ |
|
||||||
static const char* lastName = nil; |
|
||||||
if (lastName != name) |
|
||||||
{ |
|
||||||
lastName = name; |
|
||||||
|
|
||||||
char buf[256]; |
|
||||||
if (gInst->fProgressType == kValidating) |
|
||||||
strcpy(buf, "Checking "); |
|
||||||
else |
|
||||||
strcpy(buf, "Downloading "); |
|
||||||
strcat(buf, name); |
|
||||||
|
|
||||||
SetDlgItemText(gInst->fDlg, IDC_DL_TEXT, buf); |
|
||||||
} |
|
||||||
|
|
||||||
SendDlgItemMessage(gInst->fDlg, IDC_PROGRESS, PBM_DELTAPOS, delta, 0); |
|
||||||
|
|
||||||
jvBaseDlg::PumpQueue(); |
|
||||||
} |
|
||||||
|
|
||||||
void plPlasmaUpdate::ILog(const char* format, ...) |
|
||||||
{ |
|
||||||
static plStatusLog* log = nil; |
|
||||||
|
|
||||||
if (!log) |
|
||||||
log = plStatusLogMgr::GetInstance().CreateStatusLog(0, "PlasmaUpdate.log"); |
|
||||||
|
|
||||||
va_list args; |
|
||||||
va_start(args, format); |
|
||||||
log->AddLineV(format, args); |
|
||||||
va_end(args); |
|
||||||
} |
|
||||||
|
|
||||||
BOOL plPlasmaUpdate::IDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) |
|
||||||
{ |
|
||||||
switch (msg) |
|
||||||
{ |
|
||||||
case WM_INITDIALOG: |
|
||||||
IInit(); |
|
||||||
SetFocus(GetDlgItem(fDlg, IDC_DL_BUTTON)); |
|
||||||
return FALSE; |
|
||||||
|
|
||||||
case WM_CLOSE: |
|
||||||
if (fCanExit) |
|
||||||
DestroyWindow(hDlg); |
|
||||||
return TRUE; |
|
||||||
|
|
||||||
case WM_DESTROY: |
|
||||||
IShutdown(); |
|
||||||
PostQuitMessage(0); |
|
||||||
return TRUE; |
|
||||||
|
|
||||||
case WM_COMMAND: |
|
||||||
if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_DL_BUTTON) |
|
||||||
{ |
|
||||||
if (fManifests.empty()) |
|
||||||
SendMessage(fDlg, WM_CLOSE, 0, 0); |
|
||||||
else |
|
||||||
IDownloadUpdates(); |
|
||||||
return TRUE; |
|
||||||
} |
|
||||||
else if (HIWORD(wParam) == CBN_SELCHANGE && LOWORD(wParam) == IDC_BUILD_COMBO) |
|
||||||
{ |
|
||||||
IUpdateServer(); |
|
||||||
return TRUE; |
|
||||||
} |
|
||||||
break; |
|
||||||
|
|
||||||
case WM_UPDATE_SERVER: |
|
||||||
IUpdateServer(); |
|
||||||
return TRUE; |
|
||||||
} |
|
||||||
|
|
||||||
return FALSE; |
|
||||||
} |
|
@ -1,94 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
#include "hsTypes.h" |
|
||||||
#include "jvBaseDlg.h" |
|
||||||
#include <vector> |
|
||||||
#include <string> |
|
||||||
#include "plPlasmaServers.h" |
|
||||||
#include "plFileGrabber.h" |
|
||||||
|
|
||||||
class plManifest; |
|
||||||
class jvDialogResizer; |
|
||||||
|
|
||||||
class plPlasmaUpdate : public jvBaseDlg |
|
||||||
{ |
|
||||||
protected: |
|
||||||
static BOOL CALLBACK ILoginWinProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); |
|
||||||
static std::string fUserName; |
|
||||||
static std::string fPassword; |
|
||||||
|
|
||||||
std::vector<plManifest*> fManifests; |
|
||||||
char fIniPath[MAX_PATH]; |
|
||||||
bool fCanExit; |
|
||||||
enum ProgressType { kValidating, kDownloading }; |
|
||||||
ProgressType fProgressType; |
|
||||||
jvDialogResizer* fResizer; |
|
||||||
plPlasmaServers fServers; |
|
||||||
bool fAutoDownload; |
|
||||||
plFileGrabber* fFileGrabber; |
|
||||||
|
|
||||||
void IInit(); |
|
||||||
void IShutdown(); |
|
||||||
|
|
||||||
bool IReadServerInfo(); |
|
||||||
|
|
||||||
void IEnableCtrls(bool enable); |
|
||||||
|
|
||||||
BOOL IDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); |
|
||||||
|
|
||||||
static void ProgressFunc(const char* name, int delta); |
|
||||||
static void ILog(const char* format, ...); |
|
||||||
|
|
||||||
void IUpdateServer(); |
|
||||||
|
|
||||||
void IDeleteManifests(); |
|
||||||
bool IGetManifests(const char* serverRoot, bool external); |
|
||||||
void IDownloadUpdates(); |
|
||||||
|
|
||||||
public: |
|
||||||
plPlasmaUpdate(); |
|
||||||
virtual ~plPlasmaUpdate(); |
|
||||||
|
|
||||||
bool Create(); |
|
||||||
|
|
||||||
void SetAutoDownload() { fAutoDownload = true; } |
|
||||||
}; |
|
@ -1,131 +0,0 @@ |
|||||||
// Microsoft Visual C++ generated resource script. |
|
||||||
// |
|
||||||
#include "resource.h" |
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN |
|
||||||
#include <windows.h> |
|
||||||
#define IDC_STATIC (-1) // all static controls |
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// English (U.S.) resources |
|
||||||
|
|
||||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) |
|
||||||
#ifdef _WIN32 |
|
||||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US |
|
||||||
#pragma code_page(1252) |
|
||||||
#endif //_WIN32 |
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// |
|
||||||
// Dialog |
|
||||||
// |
|
||||||
|
|
||||||
IDD_UPDATE DIALOGEX 0, 0, 128, 105 |
|
||||||
STYLE DS_SETFONT | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | |
|
||||||
WS_THICKFRAME |
|
||||||
CAPTION "Parable Update" |
|
||||||
FONT 8, "MS Sans Serif", 0, 0, 0x0 |
|
||||||
BEGIN |
|
||||||
LTEXT "Build:",IDC_STATIC,7,8,18,8 |
|
||||||
COMBOBOX IDC_BUILD_COMBO,27,6,90,167,CBS_DROPDOWNLIST | |
|
||||||
WS_VSCROLL | WS_TABSTOP |
|
||||||
DEFPUSHBUTTON "Download",IDC_DL_BUTTON,34,86,56,16,WS_DISABLED |
|
||||||
LISTBOX IDC_STATUS_LIST,7,36,110,11,LBS_NOINTEGRALHEIGHT | |
|
||||||
LBS_NOSEL | WS_VSCROLL | WS_TABSTOP |
|
||||||
CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER | |
|
||||||
0x1,7,54,110,16 |
|
||||||
LTEXT "Latest Updates:",IDC_STATIC,7,26,51,8 |
|
||||||
CONTROL "xx.x MB of updates to download",IDC_DL_TEXT,"Static", |
|
||||||
SS_LEFTNOWORDWRAP | WS_GROUP,7,74,110,8 |
|
||||||
END |
|
||||||
|
|
||||||
IDD_PLASMAUPDATE_LOGIN DIALOGEX 0, 0, 150, 102 |
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | |
|
||||||
WS_SYSMENU |
|
||||||
CAPTION "Login" |
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1 |
|
||||||
BEGIN |
|
||||||
DEFPUSHBUTTON "OK",IDOK,48,62,50,14 |
|
||||||
PUSHBUTTON "Cancel",IDCANCEL,48,80,50,14 |
|
||||||
EDITTEXT IDC_USERNAME,7,17,135,12,ES_AUTOHSCROLL |
|
||||||
EDITTEXT IDC_PASSWORD,7,45,135,12,ES_PASSWORD | ES_AUTOHSCROLL |
|
||||||
LTEXT "Username",IDC_STATIC,7,7,134,8 |
|
||||||
LTEXT "Password",IDC_STATIC,7,35,136,10 |
|
||||||
END |
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// |
|
||||||
// DESIGNINFO |
|
||||||
// |
|
||||||
|
|
||||||
#ifdef APSTUDIO_INVOKED |
|
||||||
GUIDELINES DESIGNINFO |
|
||||||
BEGIN |
|
||||||
IDD_UPDATE, DIALOG |
|
||||||
BEGIN |
|
||||||
LEFTMARGIN, 7 |
|
||||||
RIGHTMARGIN, 121 |
|
||||||
TOPMARGIN, 7 |
|
||||||
BOTTOMMARGIN, 98 |
|
||||||
END |
|
||||||
|
|
||||||
IDD_PLASMAUPDATE_LOGIN, DIALOG |
|
||||||
BEGIN |
|
||||||
LEFTMARGIN, 7 |
|
||||||
RIGHTMARGIN, 143 |
|
||||||
TOPMARGIN, 7 |
|
||||||
BOTTOMMARGIN, 95 |
|
||||||
END |
|
||||||
END |
|
||||||
#endif // APSTUDIO_INVOKED |
|
||||||
|
|
||||||
|
|
||||||
#ifdef APSTUDIO_INVOKED |
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// |
|
||||||
// TEXTINCLUDE |
|
||||||
// |
|
||||||
|
|
||||||
1 TEXTINCLUDE |
|
||||||
BEGIN |
|
||||||
"resource.h\0" |
|
||||||
END |
|
||||||
|
|
||||||
2 TEXTINCLUDE |
|
||||||
BEGIN |
|
||||||
"\0" |
|
||||||
END |
|
||||||
|
|
||||||
3 TEXTINCLUDE |
|
||||||
BEGIN |
|
||||||
"\r\n" |
|
||||||
"\0" |
|
||||||
END |
|
||||||
|
|
||||||
#endif // APSTUDIO_INVOKED |
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// |
|
||||||
// Icon |
|
||||||
// |
|
||||||
|
|
||||||
// Icon with lowest ID value placed first to ensure application icon |
|
||||||
// remains consistent on all systems. |
|
||||||
IDI_ICON ICON "Dirt.ICO" |
|
||||||
#endif // English (U.S.) resources |
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef APSTUDIO_INVOKED |
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
// |
|
||||||
// Generated from the TEXTINCLUDE 3 resource. |
|
||||||
// |
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////// |
|
||||||
#endif // not APSTUDIO_INVOKED |
|
||||||
|
|
@ -1,27 +0,0 @@ |
|||||||
//{{NO_DEPENDENCIES}}
|
|
||||||
// Microsoft Visual C++ generated include file.
|
|
||||||
// Used by plPlasmaUpdate.rc
|
|
||||||
//
|
|
||||||
#define IDD_UPDATE 101 |
|
||||||
#define IDI_ICON1 102 |
|
||||||
#define IDI_ICON 102 |
|
||||||
#define IDD_PLASMAUPDATE_LOGIN 103 |
|
||||||
#define IDC_DL_BUTTON 1005 |
|
||||||
#define IDC_STATUS_LIST 1006 |
|
||||||
#define IDC_BUILD_COMBO 1008 |
|
||||||
#define IDC_PROGRESS 1014 |
|
||||||
#define IDC_DL_TEXT 1015 |
|
||||||
#define IDC_EDIT1 1016 |
|
||||||
#define IDC_USERNAME 1016 |
|
||||||
#define IDC_PASSWORD 1017 |
|
||||||
|
|
||||||
// Next default values for new objects
|
|
||||||
//
|
|
||||||
#ifdef APSTUDIO_INVOKED |
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS |
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 104 |
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40001 |
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1018 |
|
||||||
#define _APS_NEXT_SYMED_VALUE 101 |
|
||||||
#endif |
|
||||||
#endif |
|
Loading…
Reference in new issue