Вверх ↑
Этот топик читают: Гость
Ответов: 3851
Рейтинг: 159
#31: 2006-11-16 09:11:44 ЛС | профиль | цитата
DRON, я не знаю твоей схемы, но вот кусочек:
Add(TCP_Server,14647157,175,224)
{
}
Add(ArrayEnum,9541109,182,266)
{
link(onItem,15409559:doAdd,[])
link(Array,14647157:IP,[])
}
Add(ListBox,15409559,252,266)
{
Top=25
Width=120
Height=225
}
Add(Button,2421623,119,266)
{
Left=30
Top=5
link(onClick,9541109:doEnum,[(159,272)(159,272)])
}
, попробуй на досуге.
карма: 0
начавший
0
Ответов: 345
Рейтинг: 1
#32: 2006-11-17 23:50:49 ЛС | профиль | цитата
нет я немног предпологал подругому мнеб хотелось чтоб были видны только активные ip
а вот мой пример code_594
вот так если можно зделать просче подскажи ладно
карма: 0

0
файлы: 1code_594.txt [4.7KB] [612]
Ответов: 13
Рейтинг: 0
#33: 2006-12-05 00:20:30 ЛС | профиль | цитата
вот ешё пример:

Add(MainForm,933168,21,105)
{
Left=20
Top=105
Width=164
Height=101
Caption="proxirc"

link(onCreate,3225578:doEvent1,[(100,146)(100,202)])
}
Add(TCP_ServerEx,891266,245,196)
{
ServerPort=6667
link(client,9910034:Array,[(251,177)(251,177)])
}
BEGIN_SDK
Add(EditMultiEx,744206,3,3)
{
WorkCount=#6:##open|
DataCount=#6:client|
Width=629
Height=375
}
Add(TCP_Client,3677526,98,98)
{
link(onRead,463249:doSend,[(271,104)(271,153)])
link(onConnect,7124158:doEvent1,[(138,111)(138,167)])
link(onDisconnect,463249:doClose,[(181,118)(181,146)])
}
Add(TCP_Client,463249,413,133)
{
Port=6667
link(onRead,3677526:doSend,[(448,139)(448,73)(89,73)(89,118)])
}
Add(Ping,4559837,336,133)
{
Name="тут адрес сервера"
link(onFind,463249:doOpen,[])
}
Add(ArrayEnum,5093710,147,217)
{
link(onItem,1657457:doCompare,[])
link(Array,744206:client,[(153,110)(9,110)])
}
Add(Hub,7124158,147,161)
{
link(onEvent1,13819713:doValue,[])
link(onEvent2,5093710:doEnum,[(189,174)(189,205)(137,205)(137,223)])
}
Add(Memory,13819713,210,161)
{
}
Add(If_else,1657457,210,217)
{
link(onTrue,4559837:doPing,[(289,223)(289,139)])
link(Op1,13819713:Value,[])
}
END_SDK
Add(Hub,3225578,147,196)
{
link(onEvent1,11264921:doEvent2,[(189,202)(189,181)(158,181)(158,146)])
link(onEvent2,891266:##open,[(212,209)(212,202)])
}
Add(StrList,9910034,231,126)
{
FileName="clients.txt"
}
Add(Hub,11264921,168,133)
{
InCount=2
OutCount=1
link(onEvent1,9910034:doLoad,[(215,139)(215,160)])
}
Add(Button,12859234,98,98)
{
Left=30
Top=20
Width=85
Caption="обновить"
link(onClick,11264921:doEvent1,[(142,104)(142,139)])
}

прокси сервер только для irc для определённого ирксервера с разграничением кого впускать,работает !
карма: 1

0
Ответов: 1
Рейтинг: 0
#34: 2006-12-24 12:15:12 ЛС | профиль | цитата
Telnet all bugs fixed!
Add(MainForm,13581682,84,63)
{
Left=20
Top=105
Visible=1
Point(Close)
link(onCreate,13467478:##open,[])
}
Add(TCP_ServerEx,13467478,154,98)
{
ServerPort=23
}
BEGIN_SDK
Add(EditMultiEx,3385328,3,3)
{
WorkCount=#6:##open|
Width=258
Height=179
}
Add(TCP_Connection,11302843,91,105)
{
link(onRead,10490002:doInput,[])
link(onConnect,12040629:doData,[(133,118)(133,93)(39,93)(39,41)])
link(onDisconnect,10490002:doClose,[(142,125)(142,118)])
}
Add(InlineCode,10490002,161,98)
{
@Hint=#11:ConsoleExec|
WorkPoints=#7:doStart|7:doInput|7:doClose|
EventPoints=#8:onOutput|7:onError|6:onExit|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses KOL,Share,Debug,Windows;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|23: hProcess: THandle;|30: hPipeInputWrite: THandle;|30: hPipeOutputRead: THandle;|30: hPipeErrorsRead: THandle;|5: |27: dwReadThreadID: dword;|26: hReadThread: THandle;|20: FRead: boolean;|0:|9: public|24: onOutput:THI_Event;|23: onError:THI_Event;|22: onExit:THI_Event;|0:|20: procedure Read;|25: procedure Terminate;|51: procedure doStart(var Data:TData; Index:word);|51: procedure doInput(var Data:TData; Index:word);|51: procedure doClose(var Data:TData; Index:word);|29: destructor Destroy; |5: end;|0:|14:implementation|0:|56:function ReadFunc(Parent:THiAsmClass):cardinal; stdcall;|5:begin|15: Parent.Read;|15: Result := 0;|4:end;|0:|30:procedure THiAsmClass.doStart;|3:var|26: sa: TSECURITYATTRIBUTES;|19: si: TSTARTUPINFO;|26: pi: TPROCESSINFORMATION;|26: hPipeInputRead: THandle;|28: hPipeOutputWrite: THandle;|28: hPipeErrorsWrite: THandle;|15: Res: Boolean;|29: env: array[0..100] of Char;|5:begin|27: sa.nLength := sizeof(sa);|28: sa.bInheritHandle := true;|33: sa.lpSecurityDescriptor := nil;|2: |54: CreatePipe(hPipeInputRead, hPipeInputWrite, @sa, 0);|56: CreatePipe(hPipeOutputRead, hPipeOutputWrite, @sa, 0);|56: CreatePipe(hPipeErrorsRead, hPipeErrorsWrite, @sa, 0);|2: |32: ZeroMemory(@env, SizeOf(env));|30: ZeroMemory(@si, SizeOf(si));|30: ZeroMemory(@pi, SizeOf(pi));|2: |22: si.cb := SizeOf(si);|61: si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;|28: si.wShowWindow := SW_HIDE;|33: si.hStdInput := hPipeInputRead;|36: si.hStdOutput := hPipeOutputWrite;|35: si.hStdError := hPipeErrorsWrite;|0:|66: Res := CreateProcess(nil, PChar(ToString(Data)), nil, nil, true,|68: CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, @env, nil, si, pi);|30: CloseHandle(hPipeInputRead);|32: CloseHandle(hPipeOutputWrite);|32: CloseHandle(hPipeErrorsWrite);|0:|23: if not Res then begin|33: CloseHandle(hPipeInputWrite);|33: CloseHandle(hPipeOutputRead);|33: CloseHandle(hPipeErrorsRead);|18: hProcess := 0;|9: Exit;|6: end;|2: |41: hProcess := pi.hProcess; FRead := true;|72: hReadThread := CreateThread(nil,1024,@ReadFunc,Self,0,dwReadThreadID);|4:end;|0:|27:procedure THiAsmClass.Read;|63:var Total:dword; bWait:boolean; hWait:THandle; bError:boolean; |34: pBuffer: array[0..1024] of char;|5:begin|61: hWait := CreateEvent(nil,false,false,nil); bError := false;|37: while FRead and not bError do begin|18: bWait := true;|83: if not PeekNamedPipe(hPipeErrorsRead,nil,0,nil,@Total,nil) then bError := true;|25: if Total>0 then begin|21: bWait := false;|72: if ReadFile(hPipeErrorsRead, pBuffer, 1024, Total, nil) then begin|30: pBuffer[Total] := #0;|38: _hi_OnEvent(onError, pBuffer);|10: end;|8: end;|83: if not PeekNamedPipe(hPipeOutputRead,nil,0,nil,@Total,nil) then bError := true;|25: if Total>0 then begin|21: bWait := false;|72: if ReadFile(hPipeOutputRead, pBuffer, 1024, Total, nil) then begin|30: pBuffer[Total] := #0;|39: _hi_OnEvent(onOutput, pBuffer);|10: end;|8: end;|47: if bWait then WaitForSingleObject(hWait,1);|6: end;|21: CloseHandle(hWait);|22: if bError then begin|14: Terminate;|24: _hi_OnEvent(onExit);|6: end;|4:end;|0:|30:procedure THiAsmClass.doInput;|26:var Total:dword; s:string;|5:begin|26: if hProcess=0 then Exit;|22: s := ToString(Data);|63: WriteFile(hPipeInputWrite, PChar(s)^, Length(s), Total, nil);|4:end;|0:|32:procedure THiAsmClass.Terminate;|5:begin|27: if hProcess<>0 then begin|18: FRead := true;|34: TerminateProcess(hProcess, 1);|40: WaitForSingleObject(hProcess, 1000);|26: CloseHandle(hProcess);|33: CloseHandle(hPipeInputWrite);|33: CloseHandle(hPipeOutputRead);|33: CloseHandle(hPipeErrorsRead);|43: WaitForSingleObject(hReadThread, 1000);|29: CloseHandle(hReadThread);|18: hProcess := 0;|6: end;|4:end;|0:|30:procedure THiAsmClass.doClose;|5:begin|12: Terminate;|4:end;|0:|31:destructor THiAsmClass.Destroy;|5:begin|12: Terminate;|4:end;|0:|4:end.|
link(onOutput,7361595:doWork2,[])
link(onError,7361595:doWork3,[(214,111)])
link(onExit,11302843:doClose,[(204,118)(204,146)(72,146)(72,111)])
}
Add(HubEx,7361595,210,91)
{
link(onEvent,11302843:doSend,[(229,104)(229,81)(63,81)(63,118)])
}
Add(InlineCode,7883727,105,35)
{
@Hint=#22:GetEnvironmentVariable|
WorkPoints=#8:doGetVar|
EventPoints=#8:onGetVar|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses KOL,Share,Debug,Windows;|0:|4:type|28: THiAsmClass = class(TDebug)|9: public|24: onGetVar:THI_Event;|52: procedure doGetVar(var Data:TData; Index:word);|5: end;|0:|14:implementation|0:|31:procedure THiAsmClass.doGetVar;|26:var s:string; sLen: dword;|5:begin|35: sLen := 1024; SetLength(s, sLen);|69: sLen := GetEnvironmentVariable(PChar(ToString(Data)), @s[1], sLen);|22: if sLen>0 then begin|23: SetLength(s, sLen);|29: _hi_OnEvent(onGetVar, s);|6: end;|4:end;|0:|4:end.|
link(onGetVar,10490002:doStart,[(149,41)(149,104)])
}
Add(DoData,12040629,49,35)
{
Data=String(ComSpec)
link(onEventData,7883727:doGetVar,[])
}
END_SDK
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 893
Рейтинг: 18
#35: 2007-01-15 13:41:18 ЛС | профиль | цитата
Пожалуйста объясните новичку подробнее как работает TCP_ServerEx 1.0
И пару рабочих примеров с пояснениями если можно
Ато я запутался всё установил компоненты все скопировал куда нужно вот только я не пойму как это работает, с обычным сервером всё ясно как божий день но как работает TCP_ServerEx 1.0 причём в нутри не сервер а клиент досихпор в толк не возьму.
Очень прошу разъясните пожалуйта

Возможно вы посоветуете как применить его на практике
подробности здесь http://dev.hiasm.com/xf/topic.php?t=7353&start=0
мне надо раздельно посылать сообщения с сервера TCP нескольким TCP клиентам
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 2125
Рейтинг: 159
#36: 2007-01-15 20:22:54 ЛС | профиль | цитата
Для каждого клиента у сервера есть соединение с ним. Сколько клиентов - столько и соединений, надеюсь это понятно. А как сервер работает с этим соединением (одним из имеющихся) - это уже забота внутренностей сервера, причём все соединения обрабатываются единообразно.
карма: 1

0
Ответов: 893
Рейтинг: 18
#37: 2007-01-16 00:11:55 ЛС | профиль | цитата
Если я вас правильно понял то при конекте клиента создаётся копия схемы которая получает свой идентификатор, после чего для обращения к клиенту нужно сделать активным ту копию схемы которая соответствует клиенту которому адресовано сообщение используя идентификатор и точку ##select
Надеюсь что я правильно вас понял?
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 2125
Рейтинг: 159
#38: 2007-01-16 11:49:51 ЛС | профиль | цитата
Прежде всего не забыть выполнить ##open.
Обычно, вся работа производится внутри контейнера и ##select использовать нет необходимости. Наоборот, изнутри контейнера используются внешние данные. Но для чата, когда нужно всем что-то отправить - ##select вполне подойдёт.
карма: 1

0
Ответов: 9906
Рейтинг: 351
#39: 2007-01-16 13:21:34 ЛС | профиль | цитата
На всякий случай...

Не грех почитать tutorial на MultiElementEx (выделить его и нажать F1)
Насколько я понимаю, ##open аналогичен ##add, ну и т.д...
карма: 9

0
Ответов: 2125
Рейтинг: 159
#40: 2007-01-16 14:14:16 ЛС | профиль | цитата
Galkov писал(а):
##open аналогичен ##add

Не совсем. ##open стартует сервер и выполняется лишь один раз, т.е. разрешает автоматический ##add при подключении к серверу клиента.
карма: 1

0
Ответов: 9906
Рейтинг: 351
#41: 2007-01-16 19:45:59 ЛС | профиль | цитата
Тоды - ОЙ
карма: 9

0
Ответов: 893
Рейтинг: 18
#42: 2007-03-27 20:35:32 ЛС | профиль | цитата
Я так и не понял а почему в контейнере сервера находитса клиент а не сам сервер ?
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Администрация
Ответов: 15295
Рейтинг: 1519
#43: 2007-03-27 21:26:40 ЛС | профиль | цитата
Byuik, представте себе бюро знакомств(это будет сервер) с кучей людей, ищущих свою второю половину. Каждый отдельный человек(клиент) знает адрес и телефон этого бюро и может туда позвонить. Когда он это делает сервер(т.е. бюро) сводит(устанавливает коннект) его с одним из зарегистрированных у него людей и дальше они общаются уже сами. Т.е. как видите бюро предоставляет таких же в точности людей, которыми являются сами звонящие.
карма: 27
0
Ответов: 893
Рейтинг: 18
#44: 2007-03-27 21:49:54 ЛС | профиль | цитата
Итак наконецто разобралса в принципе работы сервера конечно былобы приятно кабы автор компонента сам разъяснил но....
вот для такихже как я пример использования TCP_ServerEx 1.0
code_1148.txt
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 1code_1148.txt [3.7KB] [641]
Администрация
Ответов: 15295
Рейтинг: 1519
#45: 2007-03-27 21:58:11 ЛС | профиль | цитата
Byuik, а в поле About того самого клиента, по которому тут был задан вопрос чей ник стоит?
карма: 27
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)