mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-18 03:55:19 -04:00
Show message box when failed to start due to invalid IP/port, instead of silently failing
This commit is contained in:
parent
eaf265bb54
commit
dd1e99d56b
@ -18,7 +18,7 @@ namespace ClassicalSharp {
|
|||||||
|
|
||||||
string defPath = Path.Combine("texpacks", "default.zip");
|
string defPath = Path.Combine("texpacks", "default.zip");
|
||||||
if (!Platform.FileExists(defPath)) {
|
if (!Platform.FileExists(defPath)) {
|
||||||
ErrorHandler.ShowDialog("Missing file", "default.zip not found, try running the launcher first.");
|
ErrorHandler.ShowDialog("Failed to start", "default.zip is missing, try running the launcher first.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -26,6 +26,30 @@ namespace ClassicalSharp {
|
|||||||
OpenTK.Configuration.SkipPerfCountersHack();
|
OpenTK.Configuration.SkipPerfCountersHack();
|
||||||
Utils.LogDebug("Starting " + AppName + "..");
|
Utils.LogDebug("Starting " + AppName + "..");
|
||||||
|
|
||||||
|
IPAddress ip = null;
|
||||||
|
int port = 0;
|
||||||
|
string user = null, mppass = null;
|
||||||
|
string skinServer = "http://static.classicube.net/skins/";
|
||||||
|
|
||||||
|
if (args.Length == 0 || args.Length == 1) {
|
||||||
|
user = args.Length > 0 ? args[0] : "Singleplayer";
|
||||||
|
} else if (args.Length < 4) {
|
||||||
|
ErrorHandler.ShowDialog("Failed to start", "ClassicalSharp.exe is only the raw client\n\n." +
|
||||||
|
"Use the launcher instead, or provide command line arguments.");
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
user = args[0];
|
||||||
|
mppass = args[1];
|
||||||
|
if (args.Length > 4) skinServer = args[4];
|
||||||
|
|
||||||
|
if (!IPAddress.TryParse(args[2], out ip)) {
|
||||||
|
ErrorHandler.ShowDialog("Failed to start", "Invalid IP " + args[2]); return;
|
||||||
|
}
|
||||||
|
if (!Int32.TryParse(args[3], out port) || port < 0 || port > ushort.MaxValue) {
|
||||||
|
ErrorHandler.ShowDialog("Failed to start", "Invalid port " + args[3]); return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Options.Load();
|
Options.Load();
|
||||||
DisplayDevice device = DisplayDevice.Default;
|
DisplayDevice device = DisplayDevice.Default;
|
||||||
int width = Options.GetInt(OptionsKey.WindowWidth, 0, device.Bounds.Width, 0);
|
int width = Options.GetInt(OptionsKey.WindowWidth, 0, device.Bounds.Width, 0);
|
||||||
@ -37,36 +61,7 @@ namespace ClassicalSharp {
|
|||||||
if (device.Bounds.Width < 854) width = 640;
|
if (device.Bounds.Width < 854) width = 640;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args.Length == 0 || args.Length == 1) {
|
using (Game game = new Game(user, mppass, skinServer, width, height)) {
|
||||||
const string skinServer = "http://static.classicube.net/skins/";
|
|
||||||
string user = args.Length > 0 ? args[0] : "Singleplayer";
|
|
||||||
using (Game game = new Game(user, null, skinServer, width, height))
|
|
||||||
game.Run();
|
|
||||||
} else if (args.Length < 4) {
|
|
||||||
Utils.LogDebug("ClassicalSharp.exe is only the raw client. You must either use the launcher or"
|
|
||||||
+ " provide command line arguments to start the client.");
|
|
||||||
} else {
|
|
||||||
RunMultiplayer(args, width, height);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void RunMultiplayer(string[] args, int width, int height) {
|
|
||||||
IPAddress ip = null;
|
|
||||||
if (!IPAddress.TryParse(args[2], out ip)) {
|
|
||||||
Utils.LogDebug("Invalid IP \"" + args[2] + '"'); return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int port = 0;
|
|
||||||
if (!Int32.TryParse(args[3], out port)) {
|
|
||||||
Utils.LogDebug("Invalid port \"" + args[3] + '"');
|
|
||||||
return;
|
|
||||||
} else if (port < ushort.MinValue || port > ushort.MaxValue) {
|
|
||||||
Utils.LogDebug("Specified port " + port + " is out of valid range.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
string skinServer = args.Length >= 5 ? args[4] : "http://static.classicube.net/skins/";
|
|
||||||
using (Game game = new Game(args[0], args[1], skinServer, width, height)) {
|
|
||||||
game.IPAddress = ip;
|
game.IPAddress = ip;
|
||||||
game.Port = port;
|
game.Port = port;
|
||||||
game.Run();
|
game.Run();
|
||||||
|
@ -11,11 +11,9 @@ void ErrorHandler_FailWithCode(ReturnCode result, const char* raw_msg) {
|
|||||||
char logMsgBuffer[3070 + 1] = { 0 };
|
char logMsgBuffer[3070 + 1] = { 0 };
|
||||||
String logMsg = { logMsgBuffer, 0, 3070 };
|
String logMsg = { logMsgBuffer, 0, 3070 };
|
||||||
|
|
||||||
String_Format3(&logMsg, "ClassiCube crashed.%cMessge: %c%c",
|
String_Format1(&logMsg, "ClassiCube crashed.\nMessge: %c\n", raw_msg);
|
||||||
Platform_NewLine, raw_msg, Platform_NewLine);
|
if (result) { String_Format1(&logMsg, "%y\n", &result); }
|
||||||
if (result) {
|
else { result = 1; }
|
||||||
String_Format2(&logMsg, "%y%c", &result, Platform_NewLine);
|
|
||||||
} else { result = 1; }
|
|
||||||
|
|
||||||
ErrorHandler_Backtrace(&logMsg);
|
ErrorHandler_Backtrace(&logMsg);
|
||||||
/* TODO: write to log file */
|
/* TODO: write to log file */
|
||||||
|
@ -53,15 +53,6 @@ int main(void) {
|
|||||||
main_imdct();
|
main_imdct();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*Http_Init();
|
|
||||||
AsyncRequest req = { 0 };
|
|
||||||
String url = String_FromArray(req.URL);
|
|
||||||
String_AppendConst(&url, "http://static.classicube.net/skins/UnknownShadow200.png");
|
|
||||||
void* reqHandle = NULL;
|
|
||||||
ReturnCode ret = Http_MakeRequest(&req, &reqHandle);
|
|
||||||
ReturnCode ret2 = Http_FreeRequest(reqHandle);
|
|
||||||
ReturnCode ret3 = Http_Free();*/
|
|
||||||
|
|
||||||
Utils_EnsureDirectory("maps");
|
Utils_EnsureDirectory("maps");
|
||||||
Utils_EnsureDirectory("texpacks");
|
Utils_EnsureDirectory("texpacks");
|
||||||
Utils_EnsureDirectory("texturecache");
|
Utils_EnsureDirectory("texturecache");
|
||||||
@ -71,14 +62,48 @@ int main(void) {
|
|||||||
String_Format1(&defPath, "texpacks%rdefault.zip", &Directory_Separator);
|
String_Format1(&defPath, "texpacks%rdefault.zip", &Directory_Separator);
|
||||||
|
|
||||||
if (!File_Exists(&defPath)) {
|
if (!File_Exists(&defPath)) {
|
||||||
ErrorHandler_ShowDialog("Missing file", "default.zip missing, try running launcher first");
|
ErrorHandler_ShowDialog("Failed to start", "default.zip is missing, try running launcher first");
|
||||||
Platform_Exit(1);
|
Platform_Exit(1); return 1;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Platform_LogConst("Starting " PROGRAM_APP_NAME " ..");
|
Platform_LogConst("Starting " PROGRAM_APP_NAME " ..");
|
||||||
Options_Load();
|
String title = String_FromConst(PROGRAM_APP_NAME);
|
||||||
|
String rawArgs = Platform_GetCommandLineArgs();
|
||||||
|
/* NOTE: Make sure to comment this out before pushing a commit */
|
||||||
|
//rawArgs = String_FromReadonly("UnknownShadow200 fff 127.0.1 25565");
|
||||||
|
|
||||||
|
String args[5]; Int32 argsCount = Array_Elems(args);
|
||||||
|
String_UNSAFE_Split(&rawArgs, ' ', args, &argsCount);
|
||||||
|
|
||||||
|
if (argsCount == 1) {
|
||||||
|
String name = args[0];
|
||||||
|
if (!name.length) name = String_FromReadonly("Singleplayer");
|
||||||
|
String_Copy(&Game_Username, &name);
|
||||||
|
} else if (argsCount < 4) {
|
||||||
|
ErrorHandler_ShowDialog("Failed to start", "ClassiCube.exe is only the raw client.\n\n" \
|
||||||
|
"Use the launcher instead, or provide command line arguments");
|
||||||
|
Platform_Exit(1);
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
String_Copy(&Game_Username, &args[0]);
|
||||||
|
String_Copy(&Game_Mppass, &args[1]);
|
||||||
|
String_Copy(&Game_IPAddress, &args[2]);
|
||||||
|
|
||||||
|
UInt8 ip[4];
|
||||||
|
if (!Utils_ParseIP(&args[2], ip)) {
|
||||||
|
ErrorHandler_ShowDialog("Failed to start", "Invalid IP");
|
||||||
|
Platform_Exit(1); return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
UInt16 port;
|
||||||
|
if (!Convert_TryParseUInt16(&args[3], &port)) {
|
||||||
|
ErrorHandler_ShowDialog("Failed to start", "Invalid port");
|
||||||
|
Platform_Exit(1); return 1;
|
||||||
|
}
|
||||||
|
Game_Port = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
Options_Load();
|
||||||
struct DisplayDevice device = DisplayDevice_Default;
|
struct DisplayDevice device = DisplayDevice_Default;
|
||||||
Int32 width = Options_GetInt(OPT_WINDOW_WIDTH, 0, device.Bounds.Width, 0);
|
Int32 width = Options_GetInt(OPT_WINDOW_WIDTH, 0, device.Bounds.Width, 0);
|
||||||
Int32 height = Options_GetInt(OPT_WINDOW_HEIGHT, 0, device.Bounds.Height, 0);
|
Int32 height = Options_GetInt(OPT_WINDOW_HEIGHT, 0, device.Bounds.Height, 0);
|
||||||
@ -89,40 +114,6 @@ int main(void) {
|
|||||||
if (device.Bounds.Width < 854) width = 640;
|
if (device.Bounds.Width < 854) width = 640;
|
||||||
}
|
}
|
||||||
|
|
||||||
String title = String_FromConst(PROGRAM_APP_NAME);
|
|
||||||
String rawArgs = Platform_GetCommandLineArgs();
|
|
||||||
/* NOTE: Make sure to comment this out before pushing a commit */
|
|
||||||
//rawArgs = String_FromReadonly("UnknownShadow200 fff 127.0.0.1 25565");
|
|
||||||
|
|
||||||
String args[5]; Int32 argsCount = Array_Elems(args);
|
|
||||||
String_UNSAFE_Split(&rawArgs, ' ', args, &argsCount);
|
|
||||||
|
|
||||||
if (argsCount == 1) {
|
|
||||||
String name = args[0];
|
|
||||||
if (!name.length) name = String_FromReadonly("Singleplayer");
|
|
||||||
String_Copy(&Game_Username, &name);
|
|
||||||
} else if (argsCount < 4) {
|
|
||||||
Platform_LogConst("ClassiCube.exe is only the raw client. You must either use the launcher or provide command line arguments to start the client.");
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
String_Copy(&Game_Username, &args[0]);
|
|
||||||
String_Copy(&Game_Mppass, &args[1]);
|
|
||||||
String_Copy(&Game_IPAddress, &args[2]);
|
|
||||||
|
|
||||||
UInt8 ip[4];
|
|
||||||
if (!Utils_ParseIP(&args[2], ip)) {
|
|
||||||
Platform_LogConst("Invalid IP");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
UInt16 port;
|
|
||||||
if (!Convert_TryParseUInt16(&args[3], &port)) {
|
|
||||||
Platform_LogConst("Invalid port");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
Game_Port = port;
|
|
||||||
}
|
|
||||||
|
|
||||||
Game_Run(width, height, &title, &device);
|
Game_Run(width, height, &title, &device);
|
||||||
Platform_Exit(0);
|
Platform_Exit(0);
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user