static void OnPacketReceived(RakNetSession session, Packet packet) { if (packet is DosUnknown87) { // Unknown. } else if (packet is DosEnumerationList) { if (!Executed) { Console.WriteLine("Sending console command:"); Console.WriteLine("> " + Command + " " + String.Join(" ", Arguments)); var consoleCmd = new DosSendConsoleCommand { Command = Command, Arguments = Arguments }; session.SendEncapsulated(consoleCmd, EncapsulatedReliability.ReliableOrdered); } ReceivedEvents = true; } else if (packet is DosConsoleResponse) { bool hasResult = false; var lines = (packet as DosConsoleResponse).Lines; foreach (var line in lines) { switch (line.Level) { case 4: Console.ForegroundColor = ConsoleColor.Green; hasResult = true; break; case 5: Console.ForegroundColor = ConsoleColor.Red; hasResult = true; break; default: Console.ResetColor(); break; } Console.WriteLine(line.Line); } Console.ResetColor(); Executed = true; ReceivedEvents = true; if (hasResult) { var disconnectCmd = new DosDisconnectConsole(); Session.SendEncapsulated(disconnectCmd, EncapsulatedReliability.ReliableOrdered); } } else { throw new Exception("Unhandled DOS encapsulated packet"); } }
static void OnTimedEvent(object source, ElapsedEventArgs e) { if (!ReceivedEvents) { ReceivedEvents = true; if (Session != null) { Console.WriteLine("Disconnecting."); var disconnectCmd = new DosDisconnectConsole(); Session.SendEncapsulated(disconnectCmd, EncapsulatedReliability.ReliableOrdered); } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Timed out waiting for session establishment"); Console.ResetColor(); } } else { ReceivedEvents = false; } }