Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PZ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Приложение а.5 Файл «Processor.Cpp»

#include <iostream>

#include <string>

#include <windows.h>

#include <conio.h>

struct protocol

{

char connect = 0;

char disconnect = 1;

char file = 2;

char file_to_proccessor = 3;

char kill_proccessor = 4;

char error = 5;

}prot;

HANDLE semaphore;

HANDLE box;

const int part_size = 255;

const int delay = 1;

void main(int args, char *argv[])

{

setlocale(LC_ALL, "Russian");

if (args == 3)

{

char name[256] = "CPU ";

strcpy(name + strlen(name), (char*)(argv[1]));

SetConsoleTitle(name);

char box_name[256];

sprintf(box_name, "\\\\.\\mailslot\\Proccessor%d", atoi(argv[1]));

box = CreateMailslot(box_name, 424, 0, NULL);

DWORD dwNextSize, dwCountBytes;

byte buf[424];

semaphore = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, "mysem");

if (semaphore == NULL){

printf("Не удалось открыть семафор.\n");

getch();

exit(0);

}

while (1){

GetMailslotInfo(box, NULL, &dwNextSize, NULL, NULL);

if ((dwNextSize | 0xffff0000) != MAILSLOT_NO_MESSAGE){

ReadFile(box, &buf, sizeof(buf), &dwCountBytes, 0);

if (buf[0] == prot.file_to_proccessor){

int j = 0;

char tmp[10] = "";

for (int i = 1; i < 11; i++){

if (buf[i] != '$'){ tmp[j] = buf[i]; j++; }

else{ j++; break; }

}

j++;

char data[424] = "";

int k = 0;

for (j, k = 0; k < dwCountBytes - strlen(tmp) - 2 - 1; j++, k++){

data[k] = buf[j];

}

memset(&buf, 0, sizeof(buf));

int part = atoi(tmp);

for (int i = 0; i < dwCountBytes; i++)

{

data[i] = -data[i];

}

data[dwCountBytes - strlen(tmp) - 2] = 0;

printf("Часть - %d Размер - %d\n", part, (dwCountBytes - strlen(tmp) - 2 - 1));

char write_buf[424] = "";

itoa(part, tmp, 10);

write_buf[0] = prot.file_to_proccessor;

strcat(write_buf, tmp);

strcat(write_buf, "$");

int dop = strlen(write_buf);

memcpy(strchr(write_buf, '$') + 1, data, k);

HANDLE Send = CreateFile("\\\\.\\mailslot\\COLLECTOR", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

WaitForSingleObject(semaphore, INFINITE);

WriteFile(Send, &write_buf, dwCountBytes, &dwCountBytes, 0);

ReleaseSemaphore(semaphore, 1, NULL);

CloseHandle(Send);

}

if (buf[0] == prot.kill_proccessor){

break;

}

}

Sleep(delay);

}

CloseHandle(semaphore);

}

else{

printf("Ошибка приема параметров.\n");

getch();

}

}

Приложение В Тестирование

Приложение B.1 Интерфейсная часть

Приложение B.2 Серверная часть

Приложение B.3 Передача команды на сервер

Приложение B.4 Получение результата

Приложение C UML диаграммы

Приложение C.1 UML диаграмма вариантов использования

Приложение C.2 UML Диаграмма развертывания

Приложение C.3 UML Диаграмма деятельности

Приложение C.4 UML Диаграмма деятельности

Приложение C.5 UML Диаграмма классов

28

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]