Avvio_Process.cpp o Avvio_Process.exe
child Return_Coyn;
COM::COM_S Com_Return_Coyn;
HANDLE* Process;
HANDLE* Thread;
void Svuota_Cartella(const char* path) {
// Aggiunge \\* per selezionare tutti i file nella directory
std::string pathWithWildcard = std::string(path) + "\\*";
// Inizializza la struttura per la ricerca dei file nella directory
WIN32_FIND_DATAA fileData;
HANDLE hFind = FindFirstFileA(pathWithWildcard.c_str(), &fileData);
// Se non è stato trovato alcun file nella directory, termina il programma
if (hFind == INVALID_HANDLE_VALUE)
{
std::cout << "Errore nella ricerca dei file nella directory";
}
// Elimina ogni file nella directory finché ce ne sono
do
{
// Esclude la directory stessa e la directory padre
if (strcmp(fileData.cFileName, ".") != 0 && strcmp(fileData.cFileName, "..") != 0)
{
// Costruisce il percorso completo del file
std::string fullPath = std::string(path) + "\\" + fileData.cFileName;
// Elimina il file
if (DeleteFileA(fullPath.c_str()) == FALSE)
{
std::cout << "Errore nella cancellazione del file " << fullPath;
}
}
} while (FindNextFileA(hFind, &fileData) != FALSE);
// Chiude la ricerca dei file nella directory
FindClose(hFind);
}
bool IsDirectoryEmpty(const char* path) {
WIN32_FIND_DATAA data;
HANDLE h = FindFirstFileA((std::string(path) + "\\*").c_str(), &data);
if (h == INVALID_HANDLE_VALUE) {
return true; // directory non trovata o non accessibile
}
do {
if (strcmp(data.cFileName, ".") != 0 && strcmp(data.cFileName, "..") != 0) {
FindClose(h);
return false; // la directory contiene almeno un file diverso da "." e ".."
}
} while (FindNextFileA(h, &data));
FindClose(h);
return true; // la directory è vuota
}
/*
int Start_Coyn() {
child Coyn(".\\Process.exe");
Sleep(50);
return (int)Coyn.id();
}
*/
HANDLE Start_Coyn() {
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
TCHAR szPath[] = TEXT(".\\Process.exe");
if (!CreateProcessW(szPath, NULL, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) {
printf("CreateProcess failed (%d).\n", GetLastError());
return NULL;
}
CloseHandle(pi.hThread);
if (pi.hProcess == NULL || pi.hProcess == INVALID_HANDLE_VALUE) {
printf("Invalid process handle.\n");
return NULL;
}
return pi.hProcess;
}
const char* Create_Data_Per(char* Per, int N_Pro, const char* Est) {
char* Per_0 = new char[strlen(Per) + 1];
strcpy(Per_0, Per);
char* Per_1 = strcat(Per_0, (const char*)to_string(N_Pro).c_str());
char* Per_2 = strcat(Per_1, Est);
return Per_2;
}
int GetLastModifiedTime(const char* filename) {
struct stat fileInfo;
if (stat(filename, &fileInfo) != 0) {
cerr << "Error: Unable to get file information." << endl;
return -1;
}
return fileInfo.st_mtime;
}
void Start_Cicle_Coyn() {
if (DeleteFileA(".\\Data\\Data\\Start_Coyn_UNO.txt") == FALSE) {
cout << "ERRORE nella cancellazione del file";
}
FILE* Start_Coyn_DUE = fopen(".\\Data\\Data\\Start_Coyn_DUE.txt", "w");
fclose(Start_Coyn_DUE);
Sleep(1000);
if (DeleteFileA(".\\Data\\Data\\Start_Coyn_DUE.txt") == FALSE) {
cout << "ERRORE nella cancellazione del file";
}
FILE* Start_Coyn_UNO = fopen(".\\Data\\Data\\Start_Coyn_UNO.txt", "w");
fclose(Start_Coyn_UNO);
}
int GetFileSizeInKB(const char* filepath) {
WIN32_FILE_ATTRIBUTE_DATA fileInfo;
if (!GetFileAttributesExA(filepath, GetFileExInfoStandard, &fileInfo)) {
std::cerr << "Error: failed to get file attributes.\n";
return -1;
}
ULARGE_INTEGER size;
size.LowPart = fileInfo.nFileSizeLow;
size.HighPart = fileInfo.nFileSizeHigh;
return static_cast<int>(size.QuadPart);
}
bool Exit_Process(HANDLE Process, int Val_Di_Uscita) {
if (Process != 0) {
TerminateProcess(Process, Val_Di_Uscita);
CloseHandle(Process);
return true;
}
return false;
}
int N_Handle = 100;
HANDLE* ERRORI;
int N_ERRORI[2];
void start_main() {
Process = new HANDLE[N_Handle];
N_ERRORI[0] = 0;
Com_Return_Coyn.Start(".\\Data\\Data\\Coyn.txt");
for (int i = 0; i <= N_Handle - 1; i++) {
bool Con_Us = false;
//Sleep(25);
Com_Return_Coyn.Message(to_string(i).c_str(), "w");
FILE* Create_Data = fopen(Create_Data_Per((char*)".\\Data\\Data\\Input\\", i, ".txt"), "w");
fclose(Create_Data);
//Sleep(25);
Process[i] = Start_Coyn();
for (int y = 0; y <= 20 - 1; y++) {
Sleep(1);
if (GetFileSizeInKB(Create_Data_Per((char*)".\\Data\\Data\\Input\\", i, ".txt")) != 0) {
Con_Us = true;
y = 20;
}
}
if (Con_Us) {
cout << "Avvio processo num: " << to_string(i).c_str() << endl;
}
else {
cout << "Avvio processo num: " << to_string(i).c_str() << " ERRORE" << endl;
ERRORI = new HANDLE;
ERRORI[N_ERRORI[0]] = Process[i];
N_ERRORI[N_ERRORI[0] + 1] = i;
N_ERRORI[0]++;
}
}
Sleep(1000);
if (N_ERRORI[0] != 0) {
for (int i = 0; i <= N_ERRORI[0] - 1; i++) {
bool ERROR_F = false;
bool Con_Us = false;
FILE* Create_Data = fopen(Create_Data_Per((char*)".\\Data\\Data\\Controllo\\", N_ERRORI[i + 1], "_C.txt"), "w");
fclose(Create_Data);
for (int y = 0; y <= 20 - 1; y++) {
Sleep(1);
if (GetFileSizeInKB(Create_Data_Per((char*)".\\Data\\Data\\Controllo\\", N_ERRORI[i + 1], "_C.txt")) != 0) {
ERROR_F = true;
y = 20;
}
}
if (!ERROR_F) {
Exit_Process(ERRORI[i], 1);
cout << "ERRORE nel processo num: " << N_ERRORI[i + 1] << ", Avvio sostituzione" << endl;
Process[N_ERRORI[i + 1]] = Start_Coyn();
for (int y = 0; y <= 20 - 1; y++) {
Sleep(1);
if (GetFileSizeInKB(Create_Data_Per((char*)".\\Data\\Data\\Input\\", N_ERRORI[i + 1], ".txt")) != 0) {
Con_Us = true;
y = 20;
}
}
if (Con_Us) {
cout << "Avvio processo num: " << to_string(N_ERRORI[i + 1]).c_str() << endl;
}
else {
cout << "Avvio processo num: " << to_string(N_ERRORI[i + 1]).c_str() << " ERRORE" << endl;
}
}
else {
cout << "ERRORE risolto ne processo num: " << N_ERRORI[i + 1] << endl;
}
}
}
FILE* Start_Coyn_ = fopen(".\\Data\\Data\\Start_Coyn.txt", "w");
fclose(Start_Coyn_);
cout << endl << endl;
FILE* File = fopen(".\\Data\\Data\\Start_Coyn_UNO.txt", "w");
fclose(File);
Start_Cicle_Coyn();
for (int p = 0; p <= N_Handle - 1; p++) {
Exit_Process(Process[p], 1);
}
for (int p = 0; p <= N_Handle - 1; p++) {
cout << Process[p] << endl;
}
if (DeleteFileA(".\\Data\\Data\\Start_Coyn.txt") == FALSE) {
cout << "ERRORE nella cancellazione del file";
}
Svuota_Cartella(".\\Data\\Data\\Input");
Svuota_Cartella(".\\Data\\Data\\Controllo");
}
Process.cpp o Process.exe
bool Val_Start_One = false;
bool Val_Start_One_Sic = true;
bool Val_Start_One_Con = true;
const char* Create_Data_Per(char* Per, int N_Pro, const char* Est) {
char* Per_0 = new char[strlen(Per) + 1];
strcpy(Per_0, Per);
char* Per_1 = strcat(Per_0, (const char*)to_string(N_Pro).c_str());
char* Per_2 = strcat(Per_1, Est);
return Per_2;
}
bool Start_One() {
if (Val_Start_One == true) {
Val_Start_One = false;
return false;
}
else {
try
{
if (PathFileExistsA(".\\Data\\Data\\Start_Coyn_DUE.txt")) {
Val_Start_One_Sic = true;
}
if (PathFileExistsA(".\\Data\\Data\\Start_Coyn_UNO.txt")) {
if (Val_Start_One_Sic == true) {
Val_Start_One_Sic = false;
Val_Start_One = true;
return true;
}
}
}
catch (const std::exception&)
{
}
}
}
int main()
{
COM::COM_C Connect;
Connect.Connect(".\\Data\\Data\\Coyn.txt");
int N_Pro = atoi(Connect.Read()[1]);
//cout << "Proces n. => " << ciao << endl;
while (true)
{
Sleep(10);
if (PathFileExistsA(Create_Data_Per((char*)".\\Data\\Data\\Controllo\\", N_Pro, "_C.txt"))) {
Sleep(10);
FILE* File = fopen(Create_Data_Per((char*)".\\Data\\Data\\Controllo\\", N_Pro, "_C.txt"), "w");
fprintf(File, (const char*)to_string(N_Pro).c_str());
fclose(File);
}
else {
if (Val_Start_One_Con == true) {
if (PathFileExistsA(Create_Data_Per((char*)".\\Data\\Data\\Input\\", N_Pro, ".txt"))) {
FILE* File = fopen(Create_Data_Per((char*)".\\Data\\Data\\Input\\", N_Pro, ".txt"), "w");
fprintf(File, (const char*)to_string(N_Pro).c_str());
fclose(File);
Val_Start_One_Con = false;
}
}
else {
if (PathFileExistsA(".\\Data\\Data\\Start_Coyn.txt")) {
if (Start_One()) {
cout << "Proces n. => " << N_Pro << endl;
}
}
}
}
}
}