Существующий на данный момент TCP_Server не позволяет делать нормальный сервер, так как его doSend отправляет одинаковые данные всем соединениям (такое подходит только для чата). В отличие от него новый TCP_ServerEx - это контейнер, в котором происходит работа с каждым соединением в отдельности, для чего в контейнере есть TCP_Client, который представляет собой соединение сервера. Старт сервера - точка ##add, останов - ##clear. Каждое новое соединение порождает новый мультик, и событие ##add внутри контейнера.
Используется модифицированный hiTCP_Client.pas, функционально ничем не отличающийся, добавлены только новые функции, используемые в TCP_ServerEx.
P.S. Ниже есть обновление http://www.hiasm.com/xf/topic.php?p=36736#P36736
Этот топик читают: Гость
Ответов: 2125
Рейтинг: 159
|
|||
карма: 1 |
| ||
файлы: 1 | TCP_ServerEx.rar [3.2KB] [968] |
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
На мой взгляд стоит сделать точки ##Open и ##Close для старта и остановки сервера, ##Select для выбора в качестве текущей схемы один из коннектов, ##Delete - принудительный дисконнект клиента, ##Clear - принудительный дисконнект всех клиентов(сервер остается запущенным), ##Add - эта точка просто перекрывается и остается пустой.
Так же имеет смысл сделать отдельный TCP_Client без точки doOpen и автоудаление экземпляра схемы при doClose этого клиента(если это еще не делается конечно). |
|||
карма: 27 |
| ||
Голосовали: | Rood-J |
Ответов: 2125
Рейтинг: 159
|
|||
На мой взгляд стоит сделать точки ##Open и ##Close для старта и остановки сервера Сначала я так и хотел сделать, но потом понадобился индекс точки #Add, чтобы при создании нового соединения (схемы) иметь возможность вызвать это событие. Сейчас он сохраняется при старте сервера посредством вызова #Add. В принципе, можно отказаться от точки #Add и вызывать событие onConnect компонента TCP_Client, так даже логичнее будет.
##Select и ##Delete в принципе не проверял, но должны работать. Если ты смотрел код TCP_ServerEx, то наверное заметил некоторое трюкачество при получении ссылки на TCP_Client, а также неудобство с CreateInstance и HDelete. Проблемы следующие: 1. Невозможно легально получить указатель на главный элемент порождённой схемы. 2. Невозможно произвести дополнительные действия в момент CreateInstance (надо бы её сделать overload и объявить protected) 3. Невозможно удалить схему, не вызывая при этом точку HDelete или Delete (чтобы сделать автоудаление экземпляра схемы, надо бы в THIMultiElementEx сделать DeleteInstance, тоже protected). 1 и 2 можно было бы решить, возложив необходимую инициализацию на TCP_Client, точнее на другой класс, порождённый от TCP_Client (например TCP_Connection), принудительно преобразовав Parent-a к THITCP_ServerEx. Только вот опять-же - где его взять. TCP_Client без точки doOpen ... и без свойств IP и Port. Да, была мысль сделать TCP_Connection (наследник TCP_Client), но я побоялся добавлять его в скрытую группу, неизвестно как отреагирует инсталлятор. Но в принципе, так логичнее. |
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
вызывать событие onConnect компонента TCP_Client, так даже логичнее будет.
Именно. onConnect должно вызываться всегда, при присоединение нового клиента, а onDisconnect при его отключение(принудительном и обычном). 1,2,3 - со всем согласен. До этого не возникало необходимости в таких методах поскольку не было компонент построенных по принципу одного родителя и множества потомков(PageControl был бы таким, если бы удалось его реализовать). Да, была мысль сделать TCP_Connection (наследник TCP_Client), но я побоялся добавлять его в скрытую группу, неизвестно как отреагирует инсталлятор
Неплохо бы было его внески в среду не только в качестве компонента, но и примера несколько иного использования MultiElementEx |
|||
карма: 27 |
|
Ответов: 2125
Рейтинг: 159
|
|||
сделать точки ##Open и ##Close А ничё, если мы эти точки тоже в EditMultiEx.ini добавим? |
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
По идее нет.
|
|||
карма: 27 |
|
Ответов: 2125
Рейтинг: 159
|
|||
А тада нада и в hiMultiElementEx.pas сделать такие функции, чтобы потом не говорили: "Я вот тут точку отметил, а у меня не компилируется, баг в компоненте ..."
|
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Их надо в TCp_ServerEx делать.
|
|||
карма: 27 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Их надо в TCp_ServerEx делать. Это-то само собой, но раз уж они будут стандартными у EditMultiEx надо сделать их и у MultiElementEx, хотя-бы пустыми, чтобы не было ошибки компиляции, если тупой пользователь их будет использовать. Защита на дурака.
[size=-2]------ Добавлено в 17:30 сделать точки ##Open и ##Close Сделал. |
|||
карма: 1 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Подправил кое-что, баги были.
|
|||
карма: 1 |
| ||
файлы: 1 | TCP_ServerEx1.rar [4.8KB] [799] |
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
но раз уж они будут стандартными
Почему они будут стандартными? В справке так и написать, что данные точки есть расширение для конкретного элемента и не применимо ко всем остальным контейнерам |
|||
карма: 27 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Может сделать фичу для всех Class=MultiElementEx: скрытые точки с типом 5-8 добавить к EditMulti как точки соответствующих типов 1-4? Заодно и комментарии будут от конкретного наследника MultiElementEx.
|
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Для чего это нужно?
|
|||
карма: 27 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Дык чтобы не добавлять в EditMulti.ini точки, которые
есть расширение для конкретного элемента |
|||
карма: 1 |
|
Ответов: 13
Рейтинг: 0
|
|||
Что-то непонятно как пользоватся этим компонентом ??!!
Например тут:
|
|||
карма: 1 |
|