Вверх ↑
Этот топик читают: Гость
Ответов: 110
Рейтинг: 5
#1: 2013-01-04 17:32:40 ЛС | профиль | цитата
Как доделать программу, чтобы при отключении клиент исключался из списка и удалялась схема? Может можно доделать еще лучше, предполагается большое количество коннектовклиентов к серверу.

Add(MainForm,5329078,210,371)
{
Left=20
Top=105
Height=564
link(onCreate,12225144:doEvent1,[])
}
Add(TCP_ServerEx,4557003,469,203)
{
ServerPort=111
link(onConnect,10116799:doData,[(510,216)(510,242)(457,242)(457,272)])
}
BEGIN_SDK
Add(EditMultiEx,9971778,3,3)
{
WorkCount=#6:##open|6:doSend|9:##hselect|
EventCount=#3:msg|9:onConnect|
VarCount=#13:##eventHandle|
DataCount=#4:Data|
Width=293
Height=165
Point(##hselect)
Point(##eventHandle)
link(doSend,916654:doSend,[(79,23)(79,90)])
}
Add(TCP_Connection,916654,154,77)
{
link(onRead,9971778:msg,[(235,83)(235,9)])
link(onConnect,9971778:onConnect,[(241,90)(241,16)])
link(Data,9971778:Data,[(160,40)(9,40)])
}
END_SDK
Add(TCP_Client,13909758,412,392)
{
Port=111
IP="127.0.0.1"
link(onRead,4839368:doAdd,[])
}
Add(Hub,12225144,272,385)
{
OutCount=4
link(onEvent1,4557003:##open,[(325,391)(325,209)])
link(onEvent2,13909758:doOpen,[])
link(onEvent3,5699618:doOpen,[(376,405)(376,475)])
link(onEvent4,11214954:doOpen,[(346,412)(346,546)])
}
Add(Edit,1218238,406,161)
{
Left=35
Top=100
Width=125
}
Add(DoData,10116799,469,266)
{
link(onEventData,9854300:doAdd,[])
link(Data,4557003:##eventHandle,[])
}
Add(Label,3243467,630,126)
{
Left=40
Top=75
Width=48
Height=17
Caption="server"
}
Add(Memo,4839368,482,392)
{
Left=205
Top=35
Width=135
Height=120
ScrollBars=3
}
Add(Hub,10551642,350,245)
{
link(onEvent1,4557003:##hselect,[(443,251)(443,223)])
link(onEvent2,12409383:doData,[(394,258)(394,216)])
}
Add(Label,14367956,531,399)
{
Left=220
Top=15
Width=39
Height=17
Caption="client1"
}
Add(DoData,12409383,406,210)
{
link(onEventData,4557003:doSend,[])
link(Data,1218238:Text,[])
}
Add(Memo,1950908,482,469)
{
Left=205
Top=210
Width=135
Height=115
ScrollBars=3
}
Add(Label,15775604,531,476)
{
Left=215
Top=190
Width=40
Height=17
Caption="client2"
}
Add(TCP_Client,5699618,405,469)
{
Port=111
IP="127.0.0.1"
link(onRead,1950908:doAdd,[])
}
Add(Convertor,7043146,553,329)
{
Mode=1
link(onResult,10551642:doEvent1,[(600,335)(600,371)(338,371)(338,251)])
link(Data,9854300:String,[])
}
Add(ListBox,9854300,532,266)
{
Left=35
Top=125
Width=125
Height=115
Color=65535
Point(String)
link(onClick,7043146:doConvert,[(574,279)(574,320)(541,320)(541,335)])
}
Add(Memo,7694750,474,540)
{
Left=205
Top=380
Width=135
Height=115
ScrollBars=3
}
Add(Label,4496802,530,547)
{
Left=215
Top=360
Width=42
Height=20
Caption="client3"
}
Add(TCP_Client,11214954,405,540)
{
Port=111
IP="127.0.0.1"
link(onRead,7694750:doAdd,[])
}
Add(Button,6617047,189,438)
{
Left=270
Top=10
Width=90
Caption="Disconnect"
link(onClick,13909758:doClose,[(387,444)(387,405)])
}
Add(Button,11316365,188,476)
{
Left=270
Top=185
Width=90
Caption="Disconnect"
link(onClick,5699618:doClose,[(385,482)(385,482)])
}
Add(Button,12321281,188,547)
{
Left=270
Top=355
Width=90
Caption="Disconnect"
link(onClick,11214954:doClose,[])
}



карма: 0

0
Ответов: 704
Рейтинг: 44
#2: 2013-01-04 18:09:45 ЛС | профиль | цитата
нужно использовать MultiElementExChildPanelEx
карма: 0

0
Ответов: 110
Рейтинг: 5
#3: 2013-01-04 18:58:23 ЛС | профиль | цитата
Kazbek17 писал(а):
нужно использовать MultiElementEx ChildPanelEx

Пример можно?
карма: 0

0
Ответов: 704
Рейтинг: 44
#4: 2013-01-04 20:53:07 ЛС | профиль | цитата
Вот тебе пример code_29948.txt, нажал кнопку Add Client, у тебя на форме динамически появятся Client-ы, если нужно удалить клиента, выбираешь в списке Id схемы нажимаешь Disconnect и Clietn удалится.
карма: 0

1
файлы: 1code_29948.txt [3.4KB] [78]
Голосовали:Doaxan
Ответов: 110
Рейтинг: 5
#5: 2013-01-04 21:40:29 ЛС | профиль | цитата
Kazbek17, еще один вопрос, как сделать, как сделать автоматическое удаление из списка, клиента который отключился сам? То есть чтобы при нажатии на кнопку "Disconnect", клиент отключался и удалялся сам из списка.
карма: 0

0
Ответов: 704
Рейтинг: 44
#6: 2013-01-04 22:14:54 ЛС | профиль | цитата
Add(MainForm,5329078,210,294)
{
Left=20
Top=105
Width=715
Height=611
}
Add(TCP_ServerEx,4557003,469,126)
{
ServerPort=111
link(onConnect,10116799:doData,[(509,139)(509,174)(457,174)(457,195)])
link(onTrue,1113333:doTimer,[(524,146)(524,463)(236,463)(236,419)])
}
BEGIN_SDK
Add(EditMultiEx,9971778,3,3)
{
WorkCount=#6:##open|6:doSend|9:##hselect|
EventCount=#3:msg|9:onConnect|6:onTrue|
VarCount=#13:##eventHandle|6:client|
DataCount=#4:Data|
Width=741
Height=221
Point(##hselect)
Point(##eventHandle)
link(doSend,916654:doSend,[(79,16)(79,132)])
link(client,4163011:client,[(16,160)(328,160)])
}
Add(TCP_Connection,916654,154,119)
{
DataType=3
link(onRead,4163011:doUnPack,[(272,125)(272,69)])
link(onConnect,9971778:onConnect,[(499,132)(499,16)])
}
Add(StreamUnPack,4163011,308,63)
{
DataCount=#4:data|4:type|6:client|
link(onUnPack,11133033:doEvent,[])
}
Add(IndexToChanel,11133033,420,63)
{
Point(Data)
Point(Index)
link(onEvent1,9971778:msg,[(488,69)(488,9)])
link(onEvent2,339693:doCompare,[])
link(Data,4163011:data,[(426,45)(356,45)(356,113)(314,113)])
link(Index,4163011:type,[(433,51)(365,51)(365,120)(321,120)])
}
Add(If_else,339693,525,70)
{
Op2=Integer(0)
link(onTrue,9971778:onTrue,[(595,76)(595,23)])
}
END_SDK
Add(Edit,1218238,406,84)
{
Left=10
Top=380
Width=135
}
Add(DoData,10116799,469,189)
{
link(onEventData,9854300:doAdd,[])
link(Data,4557003:##eventHandle,[])
}
Add(Label,3243467,224,231)
{
Left=15
Top=355
Width=48
Height=17
Caption="server"
}
Add(Hub,10551642,350,168)
{
link(onEvent1,4557003:##hselect,[(443,174)(443,146)])
link(onEvent2,12409383:doData,[(394,181)(394,139)])
}
Add(DoData,12409383,406,133)
{
link(onEventData,4557003:doSend,[])
link(Data,1218238:Text,[])
}
Add(Convertor,7043146,637,252)
{
Mode=1
link(onResult,10551642:doEvent1,[(677,258)(677,294)(338,294)(338,174)])
link(Data,9854300:String,[])
}
Add(ListBox,9854300,616,189)
{
Left=10
Top=405
Width=135
Height=115
Color=65535
Point(String)
Point(Index)
link(onClick,7043146:doConvert,[(687,202)(687,244)(625,244)(625,258)])
}
Add(ChildPanelEx,6875552,420,371)
{
Mode=1
link(client,6875552:##eventIndex,[(426,359)(477,359)(477,413)(426,413)])
}
BEGIN_SDK
Add(EditMultiEx,6959901,21,21)
{
WorkCount=#5:##add|6:doOpen|8:##delete|
EventCount=#7:onClick|
VarCount=#12:##eventIndex|
DataCount=#6:client|
Width=678
Height=228
Point(##add)
Point(##delete)
Point(##eventIndex)
link(doOpen,7308120:doOpen,[])
}
Add(Panel,1332402,273,147)
{
Width=170
Height=160
Layout="parent.Grid"
}
Add(Button,15852922,35,154)
{
Left=75
Top=5
Width=90
Caption="Disconnect"
link(onClick,15880035:doPack,[])
}
Add(TCP_Client,7308120,154,28)
{
Port=111
IP="127.0.0.1"
DataType=3
link(onRead,6113621:doAdd,[])
}
Add(Memo,6113621,434,28)
{
Left=10
Top=30
Width=135
Height=120
ScrollBars=3
}
Add(Label,15307322,231,147)
{
Left=25
Top=10
Width=39
Height=17
Caption="client1"
}
Add(StreamPack,15880035,91,154)
{
DataCount=#4:data|4:type|6:client|
link(onPack,7308120:doSend,[(139,160)(139,48)])
link(data,1012311:Value,[])
link(type,15095641:Value,[])
link(client,6959901:client,[(111,88)(27,88)])
}
Add(Memory,1012311,91,49)
{
Default=Integer(0)
}
Add(Memory,15095641,98,98)
{
Default=Integer(1)
}
END_SDK
Add(Button,1325841,98,364)
{
Left=10
Top=540
Width=135
Caption="Add Client"
link(onClick,1391423:doEvent1,[])
}
Add(GridLayout,14961240,203,385)
{
Name="Grid"
Rows=3
Cols=3
}
Add(Hub,1391423,147,364)
{
OutCount=5
link(onEvent1,4557003:##open,[(296,370)(296,132)])
link(onEvent2,6875552:##add,[])
link(onEvent3,6875552:doOpen,[])
link(onEvent4,14961240:doResize,[])
}
Add(DoData,3658296,301,413)
{
link(onEventData,976346:doEvent1,[])
link(Data,4557003:client,[(307,342)(482,342)])
}
Add(Timer,1113333,252,413)
{
Interval=100
Enable=1
AutoStop=1
link(onTimer,3658296:doData,[])
}
Add(Hub,976346,357,413)
{
link(onEvent1,6875552:##delete,[(389,419)(389,391)])
link(onEvent2,16394113:doText,[])
}
Add(Edit,16394113,462,420)
{
Left=445
Top=420
link(onChange,9854300:doDelete,[(511,426)(511,209)])
}


Вот что-то типа того, голова уже не варит поиграй с компонентами StreamUnPack StreamPack, вообщем тебе нужно все равно отдельные программы, одна программа сервер, а другая клиент. Далее если будут подключатся клиенты их можно будет удалять по Ip, посмотри на форуме я недавно тоже делал клиент сервер только, немного по другому, но принцип один и тот же.
карма: 0

0
Ответов: 110
Рейтинг: 5
#7: 2013-01-04 23:00:39 ЛС | профиль | цитата
Kazbek17, Спасибо! Да я хочу отдельно сделать, все в одном так для примера. Просто не могу сообразить, как сделать список онлайн, в котором отображаются новые клиенты и удаляются отключившиеся. Можешь скинуть свой клиент-сервер, никак найти не могу.
карма: 0

0
Ответов: 704
Рейтинг: 44
#8: 2013-01-04 23:12:46 ЛС | профиль | цитата
чтобы работала твоя программа, для этого нужно сначала упаковать данные а потом распаковать, сложного нечего нет в этих компонентах, при упаковки указываешь индекс, данные, клиент id, а при распаковки считываешь индекс, данные, клиент id. я тебе в твоей схеме показал.
вот 2 схемы.

Клиент
code_29950.txt
Сервер
code_29951.txt
Посмотри поковыряйся, может что и нароешь, я эту схему по болтикам разложил а потом только понял как это все работает. Так что Удачи.
карма: 0

0
файлы: 2code_29950.txt [5.1KB] [83], code_29951.txt [8.4KB] [99]
Ответов: 110
Рейтинг: 5
#9: 2013-01-10 18:48:55 ЛС | профиль | цитата
Так толком и не смог сделать. Может кто-нибудь сделает список, в который при подключении заносится IP, а при отключении удаляется?
карма: 0

0
9
Сообщение
...
Прикрепленные файлы
(файлы не залиты)