forked from Grasscutters/Grasscutter
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request Grasscutters#98 from MlgmXyysd/mongodb
Integrate MongoDB into C2R
- Loading branch information
Showing
3 changed files
with
185 additions
and
115 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,160 @@ | ||
@rem | ||
@rem Copyright (C) 2002-2022 MlgmXyysd All Rights Reserved. | ||
@rem | ||
|
||
@if "%DEBUG%" == "" echo off | ||
pushd %~dp0 | ||
set CUR_PATH=%~dp0 | ||
title Grasscutter | ||
call :LOG [INFO] Welcome to Grasscutter | ||
call :LOG [INFO] To proper exit this console, use [Ctrl + C] and enter N not Y. | ||
call :LOG [INFO] | ||
call :LOG [INFO] Initializing... | ||
|
||
set CONFIG=start_config | ||
|
||
set JAVA_PATH=DO_NOT_CHECK_PATH | ||
set MITMDUMP_PATH=DO_NOT_CHECK_PATH | ||
set MONGODB_PATH=DO_NOT_CHECK_PATH | ||
|
||
set SERVER_JAR_PATH=%CUR_PATH% | ||
set DATABASE_STORAGE_PATH=%CUR_PATH%resources\Database | ||
|
||
set SERVER_JAR_NAME=grasscutter.jar | ||
set PROXY_SCRIPT_NAME=proxy | ||
|
||
if exist "%CUR_PATH%%CONFIG%.cmd" ( | ||
call "%CUR_PATH%%CONFIG%.cmd" >nul 2>nul | ||
) | ||
|
||
if not "%JAVA_PATH%" == "DO_NOT_CHECK_PATH" ( | ||
if not exist "%JAVA_PATH%java.exe" ( | ||
call :LOG [ERROR] Java not found. | ||
goto :EXIT | ||
) | ||
) else set JAVA_PATH= | ||
if not exist "%SERVER_PATH%grasscutter.jar" ( | ||
call :LOG [ERROR] Server jar not found. | ||
goto :EXIT | ||
) | ||
|
||
@rem mitmproxy not found, server only | ||
if not "%MITMDUMP_PATH%" == "DO_NOT_CHECK_PATH" ( | ||
if not exist "%MITMDUMP_PATH%mitmdump.exe" ( | ||
call :LOG [WARN] mitmdump not found, server only mode. | ||
goto :SERVER | ||
) | ||
) else set MITMDUMP_PATH= | ||
@rem proxy script not found, server only | ||
if not exist "%PROXY_SCRIPT_NAME%.py" ( | ||
if not exist "%PROXY_SCRIPT_NAME%.pyc" ( | ||
call :LOG [WARN] Missing proxy script or compiled proxy script, server only mode. | ||
goto :SERVER | ||
) else set PROXY_SCRIPT_NAME=%PROXY_SCRIPT_NAME%.pyc | ||
) else set PROXY_SCRIPT_NAME=%PROXY_SCRIPT_NAME%.py | ||
|
||
:PROXY | ||
@rem UAC Administrator privileges | ||
>nul 2>&1 reg query "HKU\S-1-5-19" || ( | ||
call :LOG [WARN] Currently running with non Administrator privileges, raising... | ||
echo set UAC = CreateObject^("Shell.Application"^) > "%temp%\UAC.vbs" | ||
echo UAC.ShellExecute "%~f0","%1","","runas",1 >> "%temp%\UAC.vbs" | ||
"%temp%\UAC.vbs" | ||
del /f /q "%temp%\UAC.vbs" >nul 2>nul | ||
exit /b | ||
) | ||
|
||
call :LOG [INFO] Starting proxy daemon... | ||
|
||
set PROXY=true | ||
|
||
@rem Store original proxy settings | ||
for /f "tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable 2^>nul') do set "ORIG_PROXY_ENABLE=%%b" | ||
for /f "tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer 2^>nul') do set "ORIG_PROXY_SERVER=%%b" | ||
|
||
@rem TODO: External proxy when ORIG_PROXY_ENABLE == 0x1 | ||
echo set ws = createobject("wscript.shell") > "%temp%\proxy.vbs" | ||
echo ws.currentdirectory = "%MITMDUMP_PATH%" >> "%temp%\proxy.vbs" | ||
echo ws.run "cmd /c mitmdump.exe -s "^&chr(34)^&"%PROXY_SCRIPT_NAME%"^&chr(34)^&" -k",0 >> "%temp%\proxy.vbs" | ||
"%temp%\proxy.vbs" | ||
del /f /q "%temp%\proxy.vbs" >nul 2>nul | ||
|
||
@rem CA certificate for HTTPS scheme | ||
call :LOG [INFO] Waiting for CA certificate generation... | ||
set CA_CERT_FILE="%USERPROFILE%\.mitmproxy\mitmproxy-ca-cert.cer" | ||
|
||
set /a TIMEOUT_COUNT=0 | ||
|
||
:CERT_CA_CHECK | ||
if not exist %CA_CERT_FILE% ( | ||
timeout /t 1 >nul 2>nul | ||
set /a TIMEOUT_COUNT+=1 | ||
goto CERT_CA_CHECK | ||
) | ||
:EXTRA_TIMEOUT | ||
if %TIMEOUT_COUNT% LEQ 2 ( | ||
timeout /t 1 >nul 2>nul | ||
set /a TIMEOUT_COUNT+=1 | ||
goto EXTRA_TIMEOUT | ||
) | ||
call :LOG [INFO] Adding CA certificate to store... | ||
certutil -addstore root %CA_CERT_FILE% >nul 2>nul | ||
|
||
call :LOG [INFO] Setting up network proxy... | ||
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f >nul 2>nul | ||
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d "127.0.0.1:8080" /f >nul 2>nul | ||
|
||
:SERVER | ||
if not "%MONGODB_PATH%" == "DO_NOT_CHECK_PATH" ( | ||
if not exist "%MONGODB_PATH%mongod.exe" ( | ||
call :LOG [WARN] MongoDB daemon not found, server only mode. | ||
goto :GAME | ||
) | ||
) else set MONGODB_PATH= | ||
call :LOG [INFO] Starting MongoDB daemon... | ||
set DATABASE=true | ||
|
||
mkdir "%DATABASE_STORAGE_PATH%" >nul 2>nul | ||
|
||
echo set ws = createobject("wscript.shell") > "%temp%\db.vbs" | ||
echo ws.currentdirectory = "%MONGODB_PATH%" >> "%temp%\db.vbs" | ||
echo ws.run "cmd /c mongod.exe --dbpath "^&chr(34)^&"%DATABASE_STORAGE_PATH%"^&chr(34)^&"",0 >> "%temp%\db.vbs" | ||
"%temp%\db.vbs" | ||
del /f /q "%temp%\db.vbs" >nul 2>nul | ||
|
||
:GAME | ||
call :LOG [INFO] Starting server... | ||
"%JAVA_PATH%java.exe" -jar "%SERVER_PATH%grasscutter.jar" | ||
call :LOG [INFO] Server stopped | ||
|
||
:EXIT | ||
if "%DATABASE%" == "" ( | ||
call :LOG [INFO] MongoDB daemon not started, no need to clean up. | ||
) else ( | ||
call :LOG [INFO] Shutting down MongoDB daemon... | ||
taskkill /t /f /im mongod.exe >nul 2>nul | ||
) | ||
if "%PROXY%" == "" ( | ||
call :LOG [INFO] Proxy daemon not started, no need to clean up. | ||
) else ( | ||
call :LOG [INFO] Restoring network settings... | ||
|
||
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d "%ORIG_PROXY_ENABLE%" /f >nul 2>nul | ||
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d "%ORIG_PROXY_SERVER%" /f >nul 2>nul | ||
|
||
call :LOG [INFO] Shutting down proxy daemon... | ||
taskkill /t /f /im mitmdump.exe >nul 2>nul | ||
|
||
call :LOG [INFO] Removing CA certificate... | ||
for /F "tokens=2" %%s in ('certutil -dump %CA_CERT_FILE% ^| findstr ^"^sha1^"') do ( | ||
set SERIAL=%%s | ||
) | ||
|
||
certutil -delstore root %SERIAL% >nul 2>nul | ||
) | ||
|
||
call :LOG [INFO] See you again :) | ||
goto :EOF | ||
|
||
:LOG | ||
echo [%time:~0,8%] %* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
@rem | ||
@rem Copyright (C) 2002-2022 MlgmXyysd All Rights Reserved. | ||
@rem | ||
|
||
@echo off | ||
pushd %~dp0 | ||
set CUR_PATH=%~dp0 | ||
|
||
@rem This will not work if your java or mitmproxy is in a different location, plugin as necessary | ||
@rem this just saves you from changing your PATH | ||
|
||
@rem Executable Path | ||
@rem Note: Fill DO_NOT_CHECK_PATH if you need to run it from PATH | ||
@rem without detecting whether the executable file exists | ||
set JAVA_PATH=C:\Program Files\Java\jdk1.8.0_202\bin\ | ||
set MITMDUMP_PATH=%CUR_PATH% | ||
set MONGODB_PATH=%CUR_PATH% | ||
|
||
@rem Utility Path | ||
set SERVER_JAR_PATH=%CUR_PATH% | ||
set DATABASE_STORAGE_PATH=%CUR_PATH%resources\Database | ||
|
||
@rem Utility Name | ||
set SERVER_JAR_NAME=grasscutter.jar | ||
set PROXY_SCRIPT_NAME=proxy |