Передача сообщений пользователям
Для передачи сообщения другим пользователям предназначена функция SendBroadcastMessage():
int SendBroadcastMessage(char *Message, WORD *ConnectionList, BYTE *ResultList, WORD ConnectionCount);
Параметр Message задает адрес текстовой строки, содержащей сообщение. Размер этой строки не должен превышать 56 байт (включая двоичный ноль, закрывающий строку).
Параметр ConnectionList - указатель на массив слов, содержащий номера каналов, используемых файл-сервером для связи с рабочими станциями. Размер этого массива определяется параметром ConnectionCount.
Параметр ResultList - массив байт, в котором для каждой станции отражается результат посылки сообщения:
0x00 | Сообщение передано успешно |
0xFC | Сообщение не передано, так как буфер сообщения для данной станции уже содержит сообщение, которое еще не было принято станцией |
0xFD | Соответствующий номер канала задан неправильно |
0xFF | Станция заблокировала прием сообщения, установив соответствующий режим приема сообщений. Этот код ошибки может появиться и в том случае, если заданный номер канала не используется |
Функция возвращает 0 при успешном завершении или код ошибки:
Код ошибки | Значение |
0xFE | Ошибка ввода/вывода или нехватка памяти на сервере |
Вместо функции SendBroadcastMessage() можно использовать функцию E1h прерывания INT21h:
На входе: | AH | = | E1h; |
DS:SI | = | Адрес буфера запроса; | |
ES:DI | = | Адрес буфера ответа. | |
На выходе: | AL | = | Код ошибки или 0, если операция завершилась без ошибок. |
Буфер запроса:
struct REQUEST { WORD PacketLength; // размер пакета запроса BYTE Function; // должно быть равно 0 BYTE ConnectionCount; // количество станций BYTE ConnectionList[ConnectionCount];// список станций BYTE MessageLength; // длина сообщения BYTE Message[MessageLength]; // сообщение };
Буфер ответа:
struct REPLAY { WORD PacketLength; // размер пакета BYTE ConnectionCount; // количество станций BYTE ResultList[ConnectionCount];// результат };