You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
248 lines
7.3 KiB
248 lines
7.3 KiB
/*==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==*/ |
|
// Migration.cpp : Defines the entry point for the application. |
|
// |
|
#include <windows.h> |
|
#include <windowsx.h> |
|
#include <process.h> |
|
#include <commctrl.h> |
|
#include "resource.h" |
|
#include "Migration.h" |
|
|
|
HINSTANCE gInstance; |
|
HWND gDlg; |
|
unsigned int gThreadID; |
|
|
|
int gTaskItem = -1; |
|
bool gTasksRunning = false; |
|
|
|
LRESULT CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); |
|
|
|
int APIENTRY WinMain(HINSTANCE hInstance, |
|
HINSTANCE hPrevInstance, |
|
LPSTR lpCmdLine, |
|
int nCmdShow) |
|
{ |
|
InitCommonControls(); |
|
|
|
HWND hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_MAINDIALOG), NULL, (DLGPROC) DlgProc); |
|
|
|
gInstance = hInstance; |
|
gDlg = hWnd; |
|
|
|
ShowWindow(hWnd, SW_SHOW); |
|
|
|
// Main message loop: |
|
MSG msg; |
|
while (GetMessage(&msg, NULL, 0, 0)) |
|
{ |
|
if (!IsWindow(hWnd) || !IsDialogMessage(hWnd, &msg)) |
|
{ |
|
TranslateMessage(&msg); |
|
DispatchMessage(&msg); |
|
} |
|
} |
|
|
|
return msg.wParam; |
|
} |
|
|
|
|
|
// Mesage handler for dlg box. |
|
LRESULT CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) |
|
{ |
|
LRESULT ret = FALSE; |
|
switch (message) |
|
{ |
|
case WM_INITDIALOG: |
|
{ |
|
HWND hListView = GetDlgItem(hDlg,IDC_TASKLIST); |
|
ListView_SetExtendedListViewStyleEx(hListView, LVS_EX_CHECKBOXES, LVS_EX_CHECKBOXES); |
|
LoadTasks(hListView); |
|
LoadTasks(hDlg); |
|
Button_SetCheck(GetDlgItem(hDlg,IDC_RADIOTEST),BST_CHECKED); |
|
ret = TRUE; |
|
} |
|
break; |
|
case WM_COMMAND: |
|
{ |
|
switch (LOWORD(wParam)) |
|
{ |
|
case IDC_START: |
|
// Start the migration Tasks |
|
SetCursor(LoadCursor(NULL,IDC_WAIT)); |
|
Button_Enable(GetDlgItem(hDlg,IDC_START),FALSE); |
|
Button_Enable(GetDlgItem(hDlg,IDC_STOP),TRUE); |
|
Button_Enable(GetDlgItem(hDlg,IDC_RADIOTEST),FALSE); |
|
Button_Enable(GetDlgItem(hDlg,IDC_RADIOLAST),FALSE); |
|
Button_Enable(GetDlgItem(hDlg,IDC_RADIOBRANCH),FALSE); |
|
_beginthreadex(NULL,0,RunTasks,NULL,0,&gThreadID); |
|
gTasksRunning = true; |
|
ret = TRUE; |
|
break; |
|
case IDC_STOP: |
|
// Stop the migration Tasks |
|
SetCursor(LoadCursor(NULL,IDC_ARROW)); |
|
Button_Enable(GetDlgItem(hDlg,IDC_START),TRUE); |
|
Button_Enable(GetDlgItem(hDlg,IDC_STOP),FALSE); |
|
Button_Enable(GetDlgItem(hDlg,IDC_RADIOTEST),TRUE); |
|
Button_Enable(GetDlgItem(hDlg,IDC_RADIOLAST),TRUE); |
|
Button_Enable(GetDlgItem(hDlg,IDC_RADIOBRANCH),TRUE); |
|
ListBox_SetCurSel(GetDlgItem(hDlg,IDC_TASKLIST),gTaskItem); |
|
gTasksRunning = false; |
|
ret = TRUE; |
|
break; |
|
default: |
|
break; |
|
} |
|
} |
|
break; |
|
case WM_NOTIFY: |
|
{ |
|
switch ((int)wParam) |
|
{ |
|
case IDC_TASKLIST: |
|
{ |
|
NMHDR* hdr = (NMHDR*)lParam; |
|
switch (hdr->code) |
|
{ |
|
case LVN_ITEMCHANGED: |
|
{ |
|
NMLISTVIEW* note = (NMLISTVIEW*)lParam; |
|
if (note->iItem != -1) |
|
{ |
|
Static_SetText(GetDlgItem(hDlg,IDC_DESCRIPTION),(*(MigrationTaskList::GetInstance()->GetList()))[note->iItem]->GetDescription()); |
|
(*(MigrationTaskList::GetInstance()->GetList()))[note->iItem]->SetEnabled(ListView_GetCheckState(hdr->hwndFrom, note->iItem) != 0); |
|
ret = true; |
|
} |
|
} |
|
break; |
|
} |
|
} |
|
break; |
|
} |
|
} |
|
break; |
|
case WM_CLOSE: |
|
PostQuitMessage(-1); |
|
break; |
|
} |
|
return ret; |
|
} |
|
|
|
|
|
MigrationTaskList::MigrationTaskList() |
|
{ |
|
static MigrationTask_Backup backup; |
|
static MigrationTask_CleanUp cleanUp; |
|
static MigrationTask_PatchBuilder patchBuilder; |
|
static MigrationTask_DataMigration dataMigration; |
|
static MigrationTask_InstallClient installClient; |
|
static MigrationTask_GenerateClientManifest generateClientManifest; |
|
static MigrationTask_DropStoredGames dropStoredGames; |
|
static MigrationTask_InstallAges installAges; |
|
static MigrationTask_CopyTestServers copyTestServers; |
|
static MigrationTask_StartLiveServers startLiveServers; |
|
|
|
fList.push_back(&backup); |
|
fList.push_back(&cleanUp); |
|
fList.push_back(&patchBuilder); |
|
fList.push_back(&dataMigration); |
|
fList.push_back(&installClient); |
|
fList.push_back(&generateClientManifest); |
|
fList.push_back(&dropStoredGames); |
|
fList.push_back(&installAges); |
|
fList.push_back(©TestServers); |
|
fList.push_back(&startLiveServers); |
|
} |
|
|
|
MigrationTaskList* MigrationTaskList::GetInstance() |
|
{ |
|
static MigrationTaskList mlist; |
|
return &mlist; |
|
} |
|
|
|
void LoadTasks(HWND hListView) |
|
{ |
|
MigrationTaskList::TaskList* tasktlist = MigrationTaskList::GetInstance()->GetList(); |
|
|
|
MigrationTaskList::TaskList::iterator it = tasktlist->begin(); |
|
int index = 0; |
|
while (it != tasktlist->end()) |
|
{ |
|
LVITEM item; |
|
ZeroMemory(&item,sizeof(item)); |
|
item.pszText = (*it)->GetName(); |
|
item.mask = LVIF_TEXT; |
|
item.iItem = index; |
|
ListView_InsertItem(hListView,&item); |
|
it++; index++; |
|
} |
|
} |
|
|
|
unsigned int __stdcall RunTasks(void* args) |
|
{ |
|
gTaskItem = 0; |
|
MigrationTaskList::TaskList* tasktlist = MigrationTaskList::GetInstance()->GetList(); |
|
|
|
while(gTasksRunning && gTaskItem < tasktlist->size()) |
|
{ |
|
if ((*tasktlist)[gTaskItem]->GetEnabled()) |
|
{ |
|
if (Button_GetCheck(GetDlgItem(gDlg,IDC_RADIOTEST)) == BST_CHECKED) |
|
(*tasktlist)[gTaskItem]->SetServer(MigrationTask::kTest); |
|
if (Button_GetCheck(GetDlgItem(gDlg,IDC_RADIOLAST)) == BST_CHECKED) |
|
(*tasktlist)[gTaskItem]->SetServer(MigrationTask::kLast); |
|
if (Button_GetCheck(GetDlgItem(gDlg,IDC_RADIOBRANCH)) == BST_CHECKED) |
|
(*tasktlist)[gTaskItem]->SetServer(MigrationTask::kBranch); |
|
|
|
ListBox_SetCurSel(GetDlgItem(gDlg,IDC_TASKLIST),gTaskItem); |
|
Static_SetText(GetDlgItem(gDlg,IDC_DESCRIPTION),(*tasktlist)[gTaskItem]->GetDescription()); |
|
gTasksRunning = (*tasktlist)[gTaskItem]->Run(gInstance,gDlg) == 0; |
|
} |
|
gTaskItem++; |
|
} |
|
|
|
gTaskItem = -1; |
|
SendMessage(gDlg,WM_COMMAND,MAKEWPARAM(IDC_STOP,BN_CLICKED),WPARAM(GetDlgItem(gDlg,IDC_STOP))); |
|
|
|
return 0; |
|
} |