Better exception catching

- Better catch in proxy handler
- Better catch in StartClient (thx doranchak)
This commit is contained in:
ORelio 2015-04-06 11:42:43 +02:00
parent 2c31efd0c9
commit ea17ec87f1
3 changed files with 51 additions and 28 deletions

View file

@ -89,6 +89,7 @@ namespace MinecraftClient
private void StartClient(string user, string uuid, string sessionID, string server_ip, ushort port, int protocolversion, bool singlecommand, string command) private void StartClient(string user, string uuid, string sessionID, string server_ip, ushort port, int protocolversion, bool singlecommand, string command)
{ {
bool retry = false;
this.sessionid = sessionID; this.sessionid = sessionID;
this.uuid = uuid; this.uuid = uuid;
this.username = user; this.username = user;
@ -113,37 +114,51 @@ namespace MinecraftClient
client.ReceiveBufferSize = 1024 * 1024; client.ReceiveBufferSize = 1024 * 1024;
handler = Protocol.ProtocolHandler.getProtocolHandler(client, protocolversion, this); handler = Protocol.ProtocolHandler.getProtocolHandler(client, protocolversion, this);
Console.WriteLine("Version is supported.\nLogging in..."); Console.WriteLine("Version is supported.\nLogging in...");
if (handler.Login()) try
{ {
if (singlecommand) if (handler.Login())
{ {
handler.SendChatMessage(command); if (singlecommand)
ConsoleIO.WriteLineFormatted("§7Command §8" + command + "§7 sent."); {
Thread.Sleep(5000); handler.SendChatMessage(command);
handler.Disconnect(); ConsoleIO.WriteLineFormatted("§7Command §8" + command + "§7 sent.");
Thread.Sleep(1000); Thread.Sleep(5000);
} handler.Disconnect();
else Thread.Sleep(1000);
{ }
foreach (ChatBot bot in scripts_on_hold) else
bot.SetHandler(this); {
bots.AddRange(scripts_on_hold); foreach (ChatBot bot in scripts_on_hold)
scripts_on_hold.Clear(); bot.SetHandler(this);
bots.AddRange(scripts_on_hold);
Console.WriteLine("Server was successfully joined.\nType '" scripts_on_hold.Clear();
+ (Settings.internalCmdChar == ' ' ? "" : "" + Settings.internalCmdChar)
+ "quit' to leave the server."); Console.WriteLine("Server was successfully joined.\nType '"
+ (Settings.internalCmdChar == ' ' ? "" : "" + Settings.internalCmdChar)
cmdprompt = new Thread(new ThreadStart(CommandPrompt)); + "quit' to leave the server.");
cmdprompt.Name = "MCC Command prompt";
cmdprompt.Start(); cmdprompt = new Thread(new ThreadStart(CommandPrompt));
cmdprompt.Name = "MCC Command prompt";
cmdprompt.Start();
}
} }
} }
catch (Exception e)
{
ConsoleIO.WriteLineFormatted("§8" + e.Message);
Console.WriteLine("Failed to join this server.");
retry = true;
}
} }
catch (SocketException) catch (SocketException)
{ {
Console.WriteLine("Failed to connect to this IP."); Console.WriteLine("Failed to connect to this IP.");
retry = true;
}
if (retry)
{
if (AttemptsLeft > 0) if (AttemptsLeft > 0)
{ {
ChatBot.LogToConsole("Waiting 5 seconds (" + AttemptsLeft + " attempts left)..."); ChatBot.LogToConsole("Waiting 5 seconds (" + AttemptsLeft + " attempts left)...");
@ -428,6 +443,10 @@ namespace MinecraftClient
public void OnPlayerJoin(Guid uuid, string name) public void OnPlayerJoin(Guid uuid, string name)
{ {
//Ignore TabListPlus placeholders
if (name.StartsWith("0000tab#"))
return;
lock (onlinePlayers) lock (onlinePlayers)
{ {
onlinePlayers[uuid] = name; onlinePlayers[uuid] = name;

View file

@ -458,7 +458,7 @@ namespace MinecraftClient.Protocol.Handlers
byte[] server_adress_len = getVarInt(server_adress_val.Length); byte[] server_adress_len = getVarInt(server_adress_val.Length);
byte[] server_port = BitConverter.GetBytes((ushort)handler.getServerPort()); Array.Reverse(server_port); byte[] server_port = BitConverter.GetBytes((ushort)handler.getServerPort()); Array.Reverse(server_port);
byte[] next_state = getVarInt(2); byte[] next_state = getVarInt(2);
byte[] handshake_packet = concatBytes( protocol_version, server_adress_len, server_adress_val, server_port, next_state); byte[] handshake_packet = concatBytes(protocol_version, server_adress_len, server_adress_val, server_port, next_state);
SendPacket(0x00, handshake_packet); SendPacket(0x00, handshake_packet);

View file

@ -57,11 +57,15 @@ namespace MinecraftClient.Proxy
} }
else return new TcpClient(host, port); else return new TcpClient(host, port);
} }
catch (ProxyException e) catch (Exception e)
{ {
ConsoleIO.WriteLineFormatted("§8" + e.Message); if (e is ProxyException || e is SocketException)
proxy = null; {
return null; ConsoleIO.WriteLineFormatted("§8" + e.Message);
proxy = null;
return null;
}
else throw;
} }
} }
} }