Сб мар 03, 2012 4:18 pm Сб мар 03, 2012 4:18 pm
То есть, говоря проще, пользователю с UIN 6 разрешено подключаться строго с 127.0.0.1 и с 192.168.10.1, а пользователю с UIN 13 - только с 127.0.0.1 и с 213.1308.24.149. Как это реализовать?
Нам нужно событие скриптового движка OnUserLogin. Схема простая: пользователь подключается к серверу, авторизуется, потом мы смотрим, подходит ли IP адрес, и если нет - отключаем юзера без лишних разговоров.
А вот и сам текст скрипта:
const
n = 2;
type
UserData = record
iUIN: integer;
sIPWhiteList: string;
end;
var
iUIN, iState, i: integer;
sIP, sMAC, sHardwareID, sCompName, sVersion: string;
UsersWhiteList: array[1..n] of UserData;
begin
UsersWhiteList[1].iUIN := 6;
UsersWhiteList[1].sIPWhiteList := '"127.0.0.1", "192.168.10.1"';
UsersWhiteList[2].iUIN := 13;
UsersWhiteList[2].sIPWhiteList := '"127.0.0.1", "213.130.24.149"';
mGetCurrentUserLoginData(iUIN, iState, sIP, sMAC, sHardwareID, sCompName, sVersion);
for i := 1 to n do
if UsersWhiteList[1].iUIN = iUIN then
if pos('"' + sIP + '"', UsersWhiteList[1].sIPWhiteList) = 0 then
mKillMyChatClient(iUIN);
end.
В примере для простоты и скорости в тексте скрипта вбиты UIN-ы и списки разрешённых адресов, обрамлённые двойными кавычками.
Можно было бы загружать этот список из файла, однако, если к серверу будет подключаться большое количество пользователей - мы получим нежелательные "тормоза", потому что обрабатывать подключения сервер должен максимально быстро.
Чат со мной