Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Обсуждение статей
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2010, 15:01   #521
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Оставьте как есть, пусть выкидывает пользователя с тем же ником, что у кого-то в чате, просто сервер все равно будет обновлять список. Задача выполняется, просто вы хотели не теребить список и не отсылать ничего клиентам если сработает совпадение, но такого не удастся в данной системе, сервер все равно обновит список. Дело в том, что он обрабатывает и простых пользователей, а на стадии коннекта их различить просто невозможно, посему идет обновление массива, которое по завершению тянет за собой обновление списка. Вот и все.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 04.07.2010, 22:11   #522
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Используя данный код
Код:
                  // Поиск ника в UserMas
                  for i3 := 1 to ServerSocket.Socket.ActiveConnections do
                    begin
                      if UserMas[i3].Name = BannedUnbannedNick then
                        begin
                          // Получим IP забаненого
                          BannedUnbannedIP := ServerSocket.Socket.Connections[i3 - 1].RemoteAddress;

                          if not (BannedUnbannedIP = '127.0.0.1') then
                            begin
                              // Поместим IP забаненого в базу
                              BanIP.Add(BannedUnbannedIP);
                              // Отошлём команду бана
                              ServerSocket.Socket.Connections[i3 - 1].SendText('21');
                              // Добавим событие бана в ServerLog
                              ServerLog.Add('[' + DateTimeToStr(Now) + '] ' + UserMas[i].Name + ' забанил ' 
                              + BannedUnbannedNick + ', IP: ' + BannedUnbannedIP + '. Причина: ' + AdminReason);
                              // Сохраняем ServerLog, BanIP и обновляем массив бана
                              SaveServerLogBanIP;

                              // Отправляем сообщение с сервера всем пользователям
                              for i2 := 0 to ServerSocket.Socket.ActiveConnections - 1 do
                                begin
                                  ServerSocket.Socket.Connections[i2].SendText('12' + UserMas[i].Name + ' забанил '
                                  + BannedUnbannedNick + '. Причина: ' + AdminReason);
                                end;

                              // Отобразим сообщение в ChatView
                              ChatView.AddNL('[' + TimeToStr(Now) + '] ', 1, 0);
                              ChatView.AddText(UserMas[i].Name + ' забанил ' + BannedUnbannedNick + ', IP: '
                              + BannedUnbannedIP + '. Причина: ' + AdminReason, 9);
                              ChatView.Format;

                              RVEChatAutoscroll;

                              // Сбрасываем цикл
                              //Break;
                            end;
                        end;
                    end;
                end;
будет забанен конкретный ник? Допустим в чате: Test, tEST, TesT. Я баню tEST, то в этом случае Test, TesT не затронуться? При поиске обращается внимание на регистр?

Последний раз редактировалось Beermonza; 05.07.2010 в 00:49.
Shouldercannon вне форума Ответить с цитированием
Старый 05.07.2010, 00:48   #523
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Две строки сверяются по коду символа, у "П" и "п" разный код. Полное совпадение числа символов, их кода и последовательности вызовет равенство двух строк.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 05.07.2010 в 00:50.
Beermonza вне форума Ответить с цитированием
Старый 24.07.2010, 14:40   #524
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

1.
Код:
AssignFile(RangeFile, 'IPRanges.txt');
При автозагрузке без ошибок будет выполнен AssignFile?
2.
Код:
  // Инициализация файла
  AssignFile(RangeFile, 'IPRanges.txt');
  try
    // Открыть для чтения
    Reset(RangeFile);
    // Считывание глубины цикла
    ReadLn(RangeFile, Range);

    // Цикл по числу шаблонов
    for a := 1 to Range do
      begin
        ReadLn(RangeFile, IPRange[a].IP1);
        ReadLn(RangeFile, IPRange[a].IP2);
      end;

    // Закрытие файла
    CloseFile(RangeFile);
Можно ли загрузку осуществлять из TStrings? Содержимое будет тоже самое.

Последний раз редактировалось Shouldercannon; 24.07.2010 в 15:07.
Shouldercannon вне форума Ответить с цитированием
Старый 24.07.2010, 20:22   #525
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Можно ли загрузку осуществлять из TStrings? Содержимое будет тоже самое.
В смысле? ...путь указать сразу 'IPRanges.txt' ?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 24.07.2010, 20:30   #526
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

1.
Цитата:
Сообщение от Beermonza Посмотреть сообщение
В смысле? ...путь указать сразу 'IPRanges.txt' ?
Из файла больше загружать не надо. Надо брать теже самые данные но уже записанные поумолчанию в TStrings или ещё куда-либо.

2. Мои опасения подтвердились. При автозагрузке AssignFile(RangeFile, 'IPRanges.txt'); не может найти файл и здесь насколько я знаю нельзя применить ExtractFilePath(Application.ExeName )

Последний раз редактировалось Shouldercannon; 24.07.2010 в 20:55.
Shouldercannon вне форума Ответить с цитированием
Старый 25.07.2010, 15:55   #527
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Если данные с файла считаны в строковые переменные, которые не изменяются, то это будет аналогично прочтению файла, только без потери времени.

Автозагрузка - это часть вашей программы, или режим ОС? Если в AssignFile писать только имя и расширение файла, то программа будет его искать в том же месте, где расположен и EXE-файл. Обычно для системных данных используется дополнительный файл, чаще всего ini, ...в нем все пути, по которым следует искать базы данных.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 25.07.2010, 16:20   #528
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
Если данные с файла считаны в строковые переменные, которые не изменяются, то это будет аналогично прочтению файла, только без потери времени.

Автозагрузка - это часть вашей программы, или режим ОС? Если в AssignFile писать только имя и расширение файла, то программа будет его искать в том же месте, где расположен и EXE-файл. Обычно для системных данных используется дополнительный файл, чаще всего ini, ...в нем все пути, по которым следует искать базы данных.
1. Да, автозагрузка часть моей программы. Как нистранно но работает
Код:
AssignFile(RangeFile, ExtractFilePath(Application.ExeName) + 'IPRanges.txt');
[B2][/B]. Попытался пеерйти с файла на TStrings
Код:
var
  a: Integer;
  IPRange: array[0..255] of TIPList;
  s: TStrings;
begin
  s := TStrings.Create;
  s.Add('77.108.192.0');
  s.Add('77.108.255.255');
  s.Add('82.209.64.0');
  s.Add('82.209.127.255');
  s.Add('85.234.32.0');
  s.Add('85.234.63.255');
  s.Add('92.246.160.0');
  s.Add('92.246.191.255');
  s.Add('95.83.64.0');
  s.Add('95.83.127.255');

  // Цикл по числу шаблонов
  for a := 1 to 5 do
    begin
      IPRange[a].IP1 := s.Text;
      IPRange[a].IP2 := s.Text;
    end;
Но при нажатии на кнопку появляется ошибка Abstract Error.

Последний раз редактировалось Shouldercannon; 25.07.2010 в 17:10.
Shouldercannon вне форума Ответить с цитированием
Старый 25.07.2010, 18:01   #529
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

TStrings не доступен для использования вне компонентов, нужно заменить тип на TStringList:

Код:
var
  IPRange: array[0..255] of TIPList;
  s: TStringList;

begin
  s := TStringList.Create;

  s.Add('77.108.192.0');
  s.Add('77.108.255.255');

  IPRange[0].IP1 := s.Strings[0];
  IPRange[1].IP2 := s.Strings[1];
end;
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 25.07.2010, 19:38   #530
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

А если IP-адресов много?

Последний раз редактировалось Shouldercannon; 25.07.2010 в 19:47.
Shouldercannon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обновление в блоге - Создание клиент-сервера Pblog Обсуждение статей 0 03.10.2007 17:12
обновление в блоге - Диплом. Создание и продвижение сайта - готовь сани летом, а дипл Pblog Обсуждение статей 0 31.08.2007 20:00
обновление в блоге - USB Холодильник Pblog Обсуждение статей 0 25.06.2007 14:13
обновление в блоге - О ярлыках Pblog Обсуждение статей 0 27.05.2007 03:17