Что нового

[Сеть, интернет] Проверить есть ли коннект

JaG

Новичок
Сообщения
17
Репутация
0
Имеется ICQ.au3 для исользования ICQ.dll

[box title=ICQ.au3]
Код:
Const $ICQMOD_DLL = 'ICQ.dll'

Const $PROXY_TYPE_SOCKS_4 = 1
Const $PROXY_TYPE_SOCKS_5 = 2

Const $AUTH_OK = 1
Const $AUTH_NO = 0

Const $ICQ_CONNECT_STATUS_OK = 0xFFFFFFFF
Const $ICQ_CONNECT_STATUS_RECV_ERROR = 0xFFFFFFFE
Const $ICQ_CONNECT_STATUS_SEND_ERROR = 0xFFFFFFFD
Const $ICQ_CONNECT_STATUS_CONNECT_ERROR = 0xFFFFFFFC
Const $ICQ_CONNECT_STATUS_AUTH_ERROR = 0xFFFFFFFB

Const $ICQ_CLIENT_STATUS_CONNECTED = 1
Const $ICQ_CLIENT_STATUS_DISCONNECTED = 2

Const $stICQ_CLIENT = DllStructCreate("byte status;ushort sequence;ulong sock")
$stPROXY_INFO = 0

Func ICQConnect($server,$login,$password,$proxy,$proxytype=2)
	if String($proxy) <> '0' Then
		$proxy = StringSplit($proxy,":",2)
		$stPROXY_INFO = DllStructCreate("ulong ProxyType;ulong ProxyIp;ushort ProxyPort")
		DllStructSetData($stPROXY_INFO, "ProxyType", $proxytype)
		DllStructSetData($stPROXY_INFO, "ProxyIp", $proxy[0])
		DllStructSetData($stPROXY_INFO, "ProxyPort", Int($proxy[1]))
	EndIf
	$srv = StringRegExp($server,"(.*):(.*)",3)
	if not @error Then
		$server = $srv[0]
		$port = $srv[1]
	Else
		Return 0
	EndIf
	$aRet = DllCall($ICQMOD_DLL, "dword", "ICQConnect", "ptr", DllStructGetPtr($stICQ_CLIENT), "str", $server, "word", $port, "str", $login, "str", $password, "ptr", $stPROXY_INFO)
	if $aRet[0] = $ICQ_CONNECT_STATUS_OK Or $aRet[0] = 4294967295 Then
		Return 1
	Else
		Return 0
	EndIf
EndFunc

Func ICQSendMsg($to,$msg)
	DllCall($ICQMOD_DLL, "dword", "ICQSendMsg", "ptr", DllStructGetPtr($stICQ_CLIENT), "str", String($to), "str", $msg)
EndFunc

Func ICQAuth($who,$auth)
	DllCall($ICQMOD_DLL, "dword", "ICQAuth", "ptr", DllStructGetPtr($stICQ_CLIENT), "str", String($who), "str", $auth)
EndFunc

Func ICQAskAuth($who,$msg)
	DllCall($ICQMOD_DLL, "dword", "ICQSendAuth", "ptr", DllStructGetPtr($stICQ_CLIENT), "str", String($who), "str", $msg)
EndFunc

Func ICQClose()
	DllCall($ICQMOD_DLL, "dword", "ICQClose", "ptr", DllStructGetPtr($stICQ_CLIENT))
EndFunc

Func ICQReadMsg()
	$Call = DllCall($ICQMOD_DLL, "dword", "ICQReadMsg", "ptr", DllStructGetPtr($stICQ_CLIENT), "str", "UIN", "str", "msg", "int", "msglen")
	if $Call[0]=0 Then
		Return 0
	Else
		Local $a[2]
		$a[0] = $Call[2]
		$a[1] = $Call[3]
		Return $a
	EndIf
EndFunc

[/box]

Как после вызова _Connect() отслеживать статус скрипта? (коннект, дисконнект)
Тоесть мы вызвали, нам показало что подключились вернув 1

Но как узнать о разрыве в процессе работы скрипта?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
А в сети поискать? Например здесь...

Видимо как-то так:

Код:
Func ICQGetStatus()
	Return DllStructGetData($stICQ_CLIENT, 1)
EndFunc   ;==>ICQGetStatus


Возвращаемые значения:

0 - ICQ не инициализирован или что-то типа того (я думаю)
$ICQ_CLIENT_STATUS_CONNECTED (1) - есть соединение
$ICQ_CLIENT_STATUS_DISCONNECTED (2) - нет соединения
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
JaG, не забывайте отмечать "тема решена", когда тема решена.
 

s00n

Новичок
Сообщения
4
Репутация
0
Спасибо! Очень помогло, пишу бота с управлением по ICQ.
 
Верх