Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

10 165 Posts in 5 540 Topics- by 1 216 Members - Latest Member: santini862

19 July 2019, 19:02
Select Language English | Russian ru | German
Main PageIRC Client KVIrc forumRussian talksСкриптингОбъектно-ориентированный скриптингНаписание класса pop3
Pages: [1]
Print
Author Topic: Написание класса pop3  (Read 11730 times)
0 Members and 1 Guest are viewing this topic.
alexzulu
Постоялец
***

Репутация: 34
Posts: 211



View Profile Email
« on: 8 February 2009, 01:27 »

Вот решил написать класс для работы с почтовым ящиком. В итоге вот такой код получился.

Code:
class(pop3,socket)
{
constructor()
{
%ln = "0"
%ps ="0"
%st = "0"
}
connectEvent()
{
echo Connected to $$->$remoteIp() $$->$remotePort()
}
disconnectEvent()
{
echo Disconnected
$$->$close()
}

connectFailedEvent()
{
echo Connect failed ($0-)
$$->$close()
}
setUser(<$0 = Login>)
{
$$->%setuser = $0
}
setPass(<$0 = Pass>)
{
$$->%setpass = $0
}
user()
{
return $$->%setuser
}
pass()
{
return $$->%setpass
}
dataAvailableEvent
{
%data = $$->$read()
%data = $str.replace($str.strip(%data),"",$cr)
echo %data;
if(!$str.grep("-ERR",%data))
{
if((%ln == "0") & (%pass == "0"))
{
$$->$write("USER "$$->%setuser\r\n)
%ln = "1"
}
if((%ln == "1") & (%ps == "0"))
{
$$->$write("PASS "$$->%setpass\r\n)
%ps ="1"
}
if((%ln == "1") & (%ps == "1") & (%st == "0"))
{
$$->$write("STAT"\r\n)
%st = "1"
}
}
else
{
$$->$write("QUIT"\r\n)
$$->$close()
}
}
}

Вроде всё так нормально, соединение и проверка наличия почты идёт. Но не могу понять откуда лезет лишняя команда.
Вот вывод в консоли.

Code:
Connected to 194.67.23.102 110
+OK
+OK Password required for user ua6hdw
+OK ua6hdw@mail.ru maildrop has 0 messages (0 octets)
+OK 0 0
-ERR Unknown command: "user"

Logged

Network: freenode. Channels: #kvirc and #kvirc-ru
alexzulu
Постоялец
***

Репутация: 34
Posts: 211



View Profile Email
« Reply #1 on: 11 February 2009, 18:39 »

может кто сможет помочь отловить ответы сервера из сокета? понять никак не могу как это сделать. хоть чтение заново организовывай.
Logged

Network: freenode. Channels: #kvirc and #kvirc-ru
Skull
Новичок
*

Репутация: 8
Posts: 42


View Profile
« Reply #2 on: 18 March 2009, 16:57 »

После команды STAT он не заканчивает, а опять шлет команду USER и так не останавливаясь.

Вот к примеру, как оно работает:
Code:
constructor()
{
%PopStep = 0;
}
Code:
dataAvailableEvent
{
/* ... */
if(!$str.grep("-ERR", %data))
{
if (%PopStep == 0)
{
$$->$write("USER "$$->%setuser\r\n)
%PopStep++
}
if (%PopStep == 2)
{
$$->$write("PASS "$$->%setpass\r\n)
%PopStep++
}
if (%PopStep == 4)
{
$$->$write("STAT\r\nQUIT\r\n")
%PopStep++
}
%PopStep++
}
/* ... */
}
Logged
Pages: [1]
Print
Jump to:  

Theme orange-lt created by panic