![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#481 |
Участник клуба Подтвердите свой е-майл
Регистрация: 26.01.2008
Сообщений: 1,899
|
![]()
Спасибо. Теперь работает как надо, но опять началось мучание списка юзеров как в случае с диапазонами (пост #457 работа с меткой).
|
![]() |
![]() |
![]() |
#482 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
Доводите код до рабочего, что еще посоветовать...
Основные вопросы мы разобрали, теперь дело техники.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
![]() |
![]() |
![]() |
#483 |
Участник клуба Подтвердите свой е-майл
Регистрация: 26.01.2008
Сообщений: 1,899
|
![]()
Применить способ с меткой и CheckConnect? Применить его в // Код приема ника клиента?
Последний раз редактировалось Shouldercannon; 24.06.2010 в 11:24. |
![]() |
![]() |
![]() |
#484 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
Вот смотрите, ...когда пользователь подключился, и он не попадает в диапазон, происходит отключение, т.е. connect -> disconnect, в чат он не попадает, обновление списка не происходит. Если пользователь в диапазон попадает, его приходится впускать в чат, ...обновление запущено, он записан в массив, но не определен как пользователь. Сервер шлет запрос, и ответ приходит, в case 1: таймера узнается, что он имеет недопустимый ник, его отключают, ...нужно снова проверить пользователей, срабатывает обновление, снова список меняется (пользователя теперь нет в списке).
К чему я все это пишу, а не показываю кодом? ...хочу вас научить думать и самостоятельно принимать решения. Итак, какие у вас мысли? ...что можно сделать, чтобы список не тревожить?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
![]() |
![]() |
![]() |
#485 | |
Участник клуба Подтвердите свой е-майл
Регистрация: 26.01.2008
Сообщений: 1,899
|
![]()
1.
Цитата:
2. Заметил, если сервер убить через диспетчер залач, то клиент выполняя данный код Код:
Может нужно вместо ClientSocket.Active := True; использовать Код:
Последний раз редактировалось Shouldercannon; 24.06.2010 в 23:52. |
|
![]() |
![]() |
![]() |
#486 | ||
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]() Цитата:
Цитата:
Таймер реконнекта нужно отключать у клиента в событии ClientSocketConnect, там должно быть изначально прописано (по моим исходникам). Процедура ClException - это перехват сообщений, чтобы сервер не выводил сообщения связанные с ошибками сокета, иначе будут стопоры пока не нажмешь "ok". Если клиентский сокет посчитал пропажу сервера за корректный disconnect, то никаких переподключений не будет, в событии ClientSocketDisconnect ничего не прописано.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 25.06.2010 в 16:04. |
||
![]() |
![]() |
![]() |
#487 | ||
Участник клуба Подтвердите свой е-майл
Регистрация: 26.01.2008
Сообщений: 1,899
|
![]()
1.
Цитата:
Код:
2. Цитата:
Код:
Последний раз редактировалось Shouldercannon; 25.06.2010 в 23:49. |
||
![]() |
![]() |
![]() |
#488 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
1. Смотрите где вызываются обновления. Там где есть UpdMas := True;. Такое у сервера в ServerSocketClientConnect. После того как произошло событие подключения клиента, в конце таймера запустится процедура обновления массива UpdateUserMas. В ней будет создана запись, что "есть неизвестный клиент", на него отправится запрос "кто такой?", обнулится счетчик Autores.
Каждый ответ клиентов на авторизацию будет считать авторизированных. UpdateUserList в конце таймера запуститься только тогда, когда все клиенты корректно авторизируются. Если хоть один из них не пройдет код: Код:
По совпадению ника канал закрывается, вызывая событие ServerSocketClientDisconnect, в котором тоже есть флаг обновления UpdMas := True;, ...он заставляет снова проверить массив, т.е. один клиент отпал по условию совпадения ника, его запись из массива UserMas удаляется, и снова всем пользователям отсылается запрос "кто такой?". Все клиенты отвечают, Autores всех считает. На этот раз все авторизировались корректно, в конце таймера условие запустит обновление списка UpdateUserList. Как этого избежать? ...а надо ли? ...может в момент манипуляции с нежелательным клиентом произойдут еще какие-нибудь изменения, а сервер, проверяя по массиву кто не прошел авторизацию, упустит важный момент обновления списка, ...а? Вообще, приходится прибегнуть к слежению за сокетом и реагированием на каждое событие (событие возвращает сокет, который его вызвал), что нарушает сам принцип построения этой системы клиент сервер, когда сервер не реагирует на клиентов вне очереди и не выполняет команды немедленно, а ставит всех в очередь, дисциплинирует, и не дает над собой издеваться многочисленными запросами. Делайте ваш выбор. 2. А если после создания вновь сервера с клиента (что находился в ожидании подключения из-за пропажи сервера) послать сообщение, он вызовет корректную работу?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
![]() |
![]() |
![]() |
#489 | ||
Участник клуба Подтвердите свой е-майл
Регистрация: 26.01.2008
Сообщений: 1,899
|
![]() Цитата:
Цитата:
Последний раз редактировалось Shouldercannon; 26.06.2010 в 17:37. |
||
![]() |
![]() |
![]() |
#490 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
Очевидно, пропажа сервера у вас не фиксируется в системе как ошибка сокета, иначе бы последовало незамедлительное переподключение, и попытки дальнейших подключений с интервалом таймера. Добавьте в тело условия процедуры ClException отправку "0" на сервер, ...это должно повторно вызвать ошибку сокета, может ваша ОС не фиксирует некорректную пропажу сервера, а сообщение вызовет ошибку на стороне клиента, ...должно сработать.
По поводу сообщения "Windows socket error", оно просто не должно появляться на экране, ClException отлавливает такие сообщения, ...если только вы не запускаете проект из под Delphi.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
обновление в блоге - Создание клиент-сервера | 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 |