- •Пояснительная записка
- •Оглавление
- •Введение
- •1 Постановка задачи
- •2 Выбор решения
- •2.1 Проектирование структуры системы
- •2.2 Проектирование протокола взаимодействия
- •2.3 Определение модулей программы
- •2.5 Проектирование серверного приложения
- •3 Описание разработки программы
- •4 Отладка и тестирование
- •Заключение
- •2.4 Проектирование интерфейсной части
- •Список используемых источников
- •Приложение а Листинги программы Приложение а.1 Файл «Program.Cs»
- •Приложение а.2 Файл «Message.Cs»
- •Приложение а.3 Файл «Form1.Cs»
- •Приложение а.4 Файл «Server.Cpp»
- •Приложение а.5 Файл «Processor.Cpp»
Приложение а.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 Диаграмма классов
