#pragma once #include "commands.h" #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include #include #include #include #include #include #pragma comment(lib, "Ws2_32.lib") #pragma pack(push,1) /* Для всех команд: * * building - номер здания (нумерация по порядку с 0) * strip - номер светодиодной ленты (ряда квартир) в здании (нумерация по порядку с 0) * план нумерации зданий и лент будет предоставлен на чертежах в отдельных файлах * floor - номер этажа (нумерация по порядку, номер нижнего этажа 0) * приложение должно будет преобразовать номер квартиры в здании в пару чисел (strip,floor) * в соответствии с планом нумерации светодиодных лент в здании * * state: * 0 - выключить подсветку * 1 - подсветка первым цветом (например, подсветка всего здания при его выборе) * 2 - подсветка вторым цветом (например, подсветка выбранных квартир) * 3 - подсветка белым цветом */ // Команда, предотвращающая переход в автоматический режим #define CMD_NOP 0x00 struct CMD_NOP_T : public TCommand { }; /* Команда установки цвета * * code: * 0 - цвет купола в режиме работы с приложением * 1 - первый цвет подсветки квартир (например, подсветка всего здания при его выборе) * 2 - второй цвет подсветки квартир (например, подсветка выбранных квартир) * * r,g,b - компоненты цвета */ #define OPT_COLOR_DOME 0 #define OPT_COLOR_ROOM_1 1 #define OPT_COLOR_ROOM_2 2 #define OPT_COLOR_ROOM_COUNT 2 #define OPT_COLOR_COUNT 3 #define CMD_GET_COLOR 0x01 struct CMD_GET_COLOR_T : public TCommand { byte code; }; #define CMD_SET_COLOR 0x02 struct CMD_SET_COLOR_T : public TCommand { byte code; byte r, g, b; }; // Команда включения/выключения подсветки всего здания #define CMD_SET_BUILDING_STATE 0x03 struct CMD_SET_BUILDING_STATE_T : public TCommand { byte building; byte state; }; // Команда включения/выключения подсветки отдельной квартиры #define CMD_SET_ROOM_STATE 0x04 struct CMD_SET_ROOM_STATE_T : public TCommand { byte building; byte strip; byte floor; byte state; }; // Команда включения/выключения подсветки всего этажа #define CMD_SET_FLOOR_STATE 0x05 struct CMD_SET_FLOOR_STATE_T : public TCommand { byte building; byte floor; byte state; }; // Команда установки подсветки всех квартир #define CMD_SET_ALL_STATE 0x06 struct CMD_SET_ALL_STATE_T : public TCommand { byte state; }; // Команда установки скорости смены подсветки купола // millisec - время в миллисекундах #define CMD_SET_DOME_TIME 0x07 struct CMD_SET_DOME_TIME_T : public TCommand { word millisec; }; // Команда включения/выключения отдельных частей макета #define PART_ALL 0xFF #define PART_DOME 0x01 #define PART_BUILDINGS 0x02 #define PART_STREET_LIGHT 0x04 #define PART_OFFICE_LIGHT 0x08 #define CMD_SET_PART_MODE 0x08 struct CMD_SET_PART_MODE_T : public TCommand { byte mode; byte part; }; //Пример отправки команды: /*DECLARE_CMD(CMD_SET_BUILDING_STATE, cmd); cmd.building = 1; cmd.state = 1; sendCommand(socket, cmd);*/ #pragma pack(pop) class CSocket { char* ipAddr_; u_short port_; public: CSocket(char* ipAddr, u_short port) { ipAddr_ = ipAddr; port_ = port; } void write(const char* buffer, size_t size) { int clientSocket = socket(AF_INET, SOCK_STREAM, 0); if (clientSocket == -1) { std::cerr << "Error creating socket" << std::endl; return; } struct sockaddr_in serverAddress; serverAddress.sin_family = AF_INET; serverAddress.sin_port = htons(port_); // Порт сервера serverAddress.sin_addr.s_addr = inet_addr(ipAddr_); // IP адрес сервера if (connect(clientSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) == -1) { std::cerr << "Error connecting to server" << std::endl; return; } if (send(clientSocket, buffer, size, 0) == -1) { std::cerr << "Error sending message" << std::endl; return; } closesocket(clientSocket); } };