Обратная связь от MSSQL-сервера к клиенту
Автор: Delirium
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Обратная связь от MSSQL-сервера к клиенту
На форуме постоянно возникает вопрос -
"Как получить обновление данных, по событию, а не таймером",
чтобы снять его раз и навсегда привожу код dll-ки, которая
является Extended Stored Procedure с единственной функцией -
отправкой UDP-broadcast сообщения.
Зависимости: Windows, SysUtils, IdUDPClient
Автор: Delirium, VideoDVD@hotmail.com, ICQ:118395746, Москва
Copyright: Delirium (Master BRAIN) 2003
Дата: 24 октября 2003 г.
***************************************************** }
library Messager;
uses
Windows,
SysUtils,
IdUDPClient;
function srv_rpcparams(srvproc: Pointer): integer; cdecl; external 'opends60.dll'
name 'srv_rpcparams';
function srv_paramdata(srvproc: Pointer; n: integer): integer; cdecl; external
'opends60.dll' name 'srv_paramdata';
function srv_paramlen(srvproc: Pointer; n: integer): integer; cdecl; external
'opends60.dll' name 'srv_paramlen';
procedure SendUDPMessage(Params: Pointer); stdcall; cdecl; export;
var
id: TIdUDPClient;
Msg: string;
Host, Port: string;
begin
try
if srv_rpcparams(Params) < 2 then
exit;
Host := Copy(PChar(srv_paramdata(Params, 1)), 1, srv_paramlen(Params, 1));
Port := Copy(Host, Pos(':', Host) + 1, Length(Host));
Delete(Host, Pos(':', Host), Length(Host));
Msg := Copy(PChar(srv_paramdata(Params, 2)), 1, srv_paramlen(Params, 2));
id := TIdUDPClient.Create(nil);
id.BroadcastEnabled := True;
id.Host := Host;
id.Port := StrToInt(Port);
id.ReceiveTimeout := -1;
id.Send(Msg);
id.Free;
except
end;
end;
exports SendUDPMessage;
begin
end.
Пример использования:
Для регистрации на MSSQL скопировать dll в
c:\Program Files\Microsoft SQL Server\80\Tools\Binn
и исполнить скрипт
sp_addextendedproc 'SendUDPMessage', 'Messager.dll'
На клиенте рекомендую использовать компонент TIdUDPServer.
Передача сообщений осуществляется так
exec SendUDPMessage '255.255.255.255:8080', 'Привет!'
где 255.255.255.255 - broadcast маска, но можно написать и конкретный адрес (192.168.1.10), 8080 - выбранный для использования порт.
|