MainWindow::MainWindow():MApplicationWindow() { QString IPaddr="127.0.0.1"; int port=3425; page1=new HomePage(this); page2 =new LoginPage(this); page3=new RegistrationPage(this); page4=new SettingPage(this); page5 =new InfoPage(this); page6 = new ContactlistPage(); page7=new DialogPage(this); sock=QSharedPointer<QTcpSocket>( new QTcpSocket()); sock->connectToHost(IPaddr,port); thread1=new SendThread(sock); thread2=new RecvThread(sock); thread1->start(); thread2->start(); page1->appear(); //переходы со страницы home на все остальные QObject::connect(page1,SIGNAL(goLoginPage()),this,SLOT(GoLoginPage())); QObject::connect(page1,SIGNAL(exiting()),this,SLOT(close())); QObject::connect(page1,SIGNAL(goRegistrationPage()),page3,SLOT(appear())); QObject::connect(page1,SIGNAL(goSettingPage()),page4,SLOT(appear())); QObject::connect(page1,SIGNAL(goContactListPage()),this,SLOT(GoContactListPage())); QObject::connect(page2,SIGNAL(goHomePage()),this,SLOT(GoHomePage())); QObject::connect(page1,SIGNAL(goInfoPage()),page5,SLOT(appear())); QObject::connect(page2,SIGNAL(readySend(QString)),thread1,SLOT(writeToServer(QString))); QObject::connect(page3,SIGNAL(readySend(QString)),thread1,SLOT(writeToServer(QString))); QObject::connect(page7,SIGNAL(readySend(QString)),thread1,SLOT(writeToServer(QString))); QObject::connect(page4,SIGNAL(changeSettings()),this,SLOT(ApplyNewSettings())); QObject::connect(thread2,SIGNAL(readyMessage(QSharedPointer<IMessage>)),this,SLOT(ListenServer(QSharedPointer<IMessage>))); QObject::connect(page6,SIGNAL(goDialogPage(QString)),this,SLOT(GoDialogPage(QString))); //***Signal incomingMessage(QString) should be replaced real signal about incoming message for user.*** QObject::connect(this, SIGNAL(incomingMessage(QString)),page6, SLOT(displayMessage(QString))); //***************************************************************************************************** }
void writeToLogs(char * logLevel, char * message) { char * logMessage = malloc(200); char * dateVar = malloc(50); getDate(dateVar); char * hostName = malloc(50); gethostname(hostName, 45); snprintf(logMessage, 190, "[%s] %s: %s on node %s\n", dateVar, logLevel, message, hostName); writeToServer(logMessage); //fprintf(logFile, "[%s] %s: %s", dateVar, logLevel, message); // write(s, logMessage, sizeof(logMessage)); // fputs(logMessage, logFile); free(hostName); free(dateVar); free(logMessage); }
int main(int argc, char * argv[]) { killOldProcNannies(); debugPrint("staring main\n"); if (pipe(newProcessToChild) < 0) { fprintf(stderr,"pipe error"); exit(0); } if (pipe(killCountPipe) < 0) { fprintf(stderr,"pipe error"); exit(0); } fcntl(killCountPipe[0], F_SETFL, O_NONBLOCK); debugPrint("connecting to %s on port %d \n", argv[1], atoi(argv[2])); MY_PORT = atoi(argv[2]); /* Put here the name of the sun on which the server is executed */ host = gethostbyname (argv[1]); int firstTime = 1; if (host == NULL) { perror ("Client: cannot get host description"); exit (1); } s = socket (AF_INET, SOCK_STREAM, 0); if (s < 0) { perror ("Client: cannot open socket"); exit (1); } bzero (&server, sizeof (server)); bcopy (host->h_addr, & (server.sin_addr), host->h_length); server.sin_family = host->h_addrtype; server.sin_port = htons (MY_PORT); while (connect (s, (struct sockaddr*) & server, sizeof (server))) { perror ("Client: cannot connect to server"); debugPrint("Tring again\n"); //exit (1); } char * pipeBuffer = NULL; /* char * procInfoRequest = malloc(200); */ /* snprintf(procInfoRequest,200, "%-200s", procInfoString); */ /* char * a = "test\0"; */ char a[200] = "test"; char * processName = NULL; int len = 0; int numberofProcesses = 0; int processLifeSpan = 0; int PID = 0; char * pointerToProcessName = NULL; char * pointerToPipeBuffer = NULL; while (keepLooping == 1) { // use this loop to get process lists pipeBuffer = malloc(63); pointerToPipeBuffer = pipeBuffer; debugPrint("writing server\n"); writeToServer(a); readFromServer(pipeBuffer); debugPrint("got %s\n", pipeBuffer); if (pipeBuffer[0] == '!') { keepLooping = 0; debugPrint("got exit signal!!!!!\n"); continue; } // char * tmpBuffer = pipeBuffer; // char * processName; len = 0; numberofProcesses = 0; processLifeSpan = 0; PID = 0; len = strchr(pipeBuffer,'#') - pipeBuffer; processName = malloc(len+1); pointerToProcessName = processName; strncpy(processName, pipeBuffer, len); processName[len] = '\0'; processName[strlen(processName) - 1] = '\0'; pipeBuffer = strchr(pipeBuffer,'#'); numberofProcesses = atoi(pipeBuffer+1); processLifeSpan = atoi(strchr(pipeBuffer,'!')+1); debugPrint("server: we have %d different procs to monitor\n", numberofProcesses); if (processLifeSpan == 99) { // 99 is the code indicating that the // server received a sighup // so flush our linked list record // of processes free(pointerToPipeBuffer); free(pointerToProcessName); pipeBuffer = NULL; processName = NULL; if (processList) { freeList(processList); // free it in case it is still set processList = NULL; } pipeBuffer = malloc(63); pointerToPipeBuffer = pipeBuffer; // debugPrint("writing server\n"); // writeToServer(a); // we likely dont need to write test again cuz // our initial message should still be there readFromServer(pipeBuffer); debugPrint("got %s\n", pipeBuffer); if (pipeBuffer[0] == '!') { keepLooping = 0; debugPrint("got exit signal!!!!!\n"); continue; } // char * tmpBuffer = pipeBuffer; // char * processName; len = 0; numberofProcesses = 0; processLifeSpan = 0; PID = 0; len = strchr(pipeBuffer,'#') - pipeBuffer; processName = malloc(len+1); pointerToProcessName = processName; strncpy(processName, pipeBuffer, len); processName[len] = '\0'; processName[strlen(processName) - 1] = '\0'; pipeBuffer = strchr(pipeBuffer,'#'); numberofProcesses = atoi(pipeBuffer+1); processLifeSpan = atoi(strchr(pipeBuffer,'!')+1); debugPrint("server: we have %d different procs to monitor\n", numberofProcesses); } free(pointerToPipeBuffer); free(pointerToProcessName); pipeBuffer = NULL; processName = NULL; // free(processName); while(numberofProcesses > 0) { // char * processName = NULL; len = 0; processLifeSpan = 0; PID = 0; numberofProcesses--; pipeBuffer = malloc(63); pointerToPipeBuffer = pipeBuffer; readFromServer(pipeBuffer); len = strchr(pipeBuffer,'#') - pipeBuffer; processName = malloc(len+1); pointerToProcessName = processName; //processName = (char *)realloc(processName, len+1); strncpy(processName, pipeBuffer, len); processName[len] = '\0'; processName[strlen(processName) - 1] = '\0'; pipeBuffer = strchr(pipeBuffer,'#'); PID = atoi(pipeBuffer+1); processLifeSpan = atoi(strchr(pipeBuffer,'!')+1); char *newP = trimwhitespace(processName); debugPrint("for PID = %d\n", PID); debugPrint("name: %s \n", newP); debugPrint("life span: %d \n", processLifeSpan); debugPrint("pid: %d \n", PID); // close (s); debugPrint("Process %d got %s\n", getpid (), pipeBuffer); if (processList) { if ( searchNodes(processList, newP, processLifeSpan) == -1) { debugPrint("%d adding node \n", getpid()); addNode(processList, newP, processLifeSpan); } } else { debugPrint("creating process list... %d processListing node \n", getpid()); processList = init(newP, processLifeSpan); } debugPrint("finished setting/looking thro processList\n"); free(pointerToPipeBuffer); free(pointerToProcessName); pipeBuffer = NULL; processName = NULL; } sleep (5); updateKillCount(); debugPrint("********************\n"); debugPrint("number of freechildren is %d: \n", freeChildren); debugPrint("number of messages from children is %d: \n", messagesFromChildren); struct node * cursorNode; int i = 0; debugPrint("processes we monitored are: \n"); cursorNode = monitoredPIDs; if (monitoredPIDs) { for (i = 0; i < getSize(monitoredPIDs); i++) { debugPrint("value: %s, key: %d\n", cursorNode->value, cursorNode->key); cursorNode = cursorNode->next; } } debugPrint("process we got are: \n"); cursorNode = processList; for (i = 0; i < getSize(processList); i++) { debugPrint("for %s, %d \n",cursorNode->value, cursorNode->key); if (getNumberOfPIDsForProcess(cursorNode->value) > 0 || firstTime == 1) { debugPrint("calling monitorProcess \n"); monitorProcess(cursorNode->value, cursorNode->key); } else { debugPrint("NOT calling monitorProcess \n"); debugPrint("No %s proc found.\n", cursorNode->value); } cursorNode = cursorNode->next; } firstTime = 0; debugPrint("done listing processes in processList\n"); } free(pipeBuffer); // free(processName); freeList(processList); freeList(monitoredPIDs); freeList(childPIDs); return 0; }
void updateKillCount() { //close(killCountPipe[1]); char * pipeBuffer= malloc(63); debugPrint("updating kill...\n"); if (read(killCountPipe[0], pipeBuffer, 63) <= 0) { debugPrint("found nothing on killCount pipe, returning\n"); free(pipeBuffer); return; } char * tmpBuffer = pipeBuffer; char * inputBuffer = malloc(150); char * processName; int len = 0; int PID = 0; int processLifeSpan = 0; len = strchr(pipeBuffer,'#') - pipeBuffer; processName = malloc(len+1); strncpy(processName, pipeBuffer, len); processName[len] = '\0'; processName[strlen(processName) - 1] = '\0'; pipeBuffer = strchr(pipeBuffer,'#'); PID = atoi(pipeBuffer+1); processLifeSpan = atoi(strchr(pipeBuffer,'!')+1); char *newP = trimwhitespace(processName); debugPrint("results from updateKillCount pipe read\n"); debugPrint("name: %s|| \n", newP); debugPrint("life span: %d \n", processLifeSpan); debugPrint("pid: %d \n", PID); if (searchNodes(monitoredPIDs, newP, PID) != -1) { debugPrint("NOT REALLYremoving pid that was killed.\n"); //removeNode(monitoredPIDs, newP, PID); } totalProcsKilled++; debugPrint("PID (%d) (%s) killed after exceeding %d seconds. \n", PID, processName, processLifeSpan); snprintf(inputBuffer, 150, "PID (%d) (%s) killed after exceeding %d seconds ", PID, processName, processLifeSpan); writeToLogs("Action", inputBuffer); debugPrint("sending message to update total kill count in server\n"); char * killCountMessage = malloc(200); snprintf(killCountMessage, 200, "k%-199d", 1); writeToServer(killCountMessage); debugPrint("sent kill count update!\n"); free(tmpBuffer); free(killCountMessage); free(inputBuffer); free(processName); freeChildren = freeChildren + 1; }