1 |
root |
1.1 |
NAME |
2 |
|
|
Net::Knuddels - www.knuddels.de protocol implementation. |
3 |
|
|
|
4 |
|
|
SYNOPSIS |
5 |
|
|
use Net::Knuddels; |
6 |
|
|
|
7 |
|
|
DESCRIPTION |
8 |
|
|
RTSL. |
9 |
|
|
|
10 |
|
|
CLASS Net::Knuddels::Protocol |
11 |
|
|
You must call the "destroy" method of this class when you no longer use |
12 |
|
|
it, as circular references will keep the object alive otherwise. |
13 |
|
|
|
14 |
|
|
new Create a new "Net::Knuddels::Protocol" object. |
15 |
|
|
|
16 |
|
|
$protocol->feed_data ($octets) |
17 |
|
|
Feed raw protocol data into the decoder. |
18 |
|
|
|
19 |
|
|
$msg = $protocol->encode_msg (@strings) |
20 |
|
|
Join the strings with "\0", encode the result into a protocol packet |
21 |
|
|
and return it. |
22 |
|
|
|
23 |
|
|
$protocol->register ($type => $callback) |
24 |
|
|
Register a callback for events of type $type, which is either the |
25 |
|
|
name of a low-level event sent by the server (such as "k" for dialog |
26 |
|
|
box) or the name of a generated event, such as "login". |
27 |
|
|
|
28 |
|
|
$protocol->destroy |
29 |
|
|
*MUST* be called to destroy the object, otherwise it will leak (no |
30 |
|
|
automatic cleanup). |
31 |
|
|
|
32 |
|
|
CLASS Net::Knuddels::Client |
33 |
|
|
Implement a Knuddels client connection. |
34 |
|
|
|
35 |
|
|
new Net::Knuddels::Client [IO::Socket::new arguments] |
36 |
|
|
Create a new client connection. |
37 |
|
|
|
38 |
|
|
Optional extra arguments: |
39 |
|
|
|
40 |
|
|
command_wait => $cb($client,$wait) |
41 |
|
|
This callback will be called with the client object |
42 |
|
|
and a time to wait. It must call the C<command_cb> method |
43 |
|
|
after the time specified, either by a blocking wait |
44 |
|
|
or via some event loop callback. The default implementation |
45 |
|
|
just does a blockign wait. |
46 |
|
|
|
47 |
|
|
$client->fh |
48 |
|
|
Return the fh used for communications. You are responsible for |
49 |
|
|
calling "$client->ready" whenever the fh becomes ready for reading. |
50 |
|
|
|
51 |
|
|
$client->ready |
52 |
|
|
To be called then the filehandle is ready for reading. Returns false |
53 |
|
|
if the server closed the connection, true otherwise. |
54 |
|
|
|
55 |
|
|
$client->command_cb |
56 |
|
|
Should be called by the "command_wait" callback when the timer has |
57 |
|
|
expired, to send a delayed command to the server. |
58 |
|
|
|
59 |
|
|
$client->command ($type => @args) |
60 |
|
|
Send a message of type $type and the given arguments to the server, |
61 |
|
|
ensures a proper rate-limit. |
62 |
|
|
|
63 |
|
|
$client->login ($url, $unknown) |
64 |
|
|
Send a 't' message. The default for $url is |
65 |
|
|
"http://www.knuddels.de/applet.html?v=87&c=-3" and $unknown is 3. |
66 |
|
|
|
67 |
|
|
$client->enter_room ($room, $nick, $password) |
68 |
|
|
Enters a room $room with $nick and $password. (for joining multiple |
69 |
|
|
rooms call this multiple times) |
70 |
|
|
|
71 |
|
|
NOTE: i won't allow joins to multiple rooms with different |
72 |
|
|
nick/password's, the java client reacted very confused.. don't know |
73 |
|
|
whether the server supports this. |
74 |
|
|
|
75 |
|
|
$client->send_whois ($nick) |
76 |
|
|
Sends a whois-request for $nick. |
77 |
|
|
|
78 |
|
|
$client->send_room_msg ($nick, $room, $message) |
79 |
|
|
Sends a private $message to $nick over $room. |
80 |
|
|
|
81 |
|
|
$client->send_priv_msg ($nick, $room, $message) |
82 |
|
|
Sends a private $message to $nick over $room. |
83 |
|
|
|
84 |
|
|
$client->send_join_room ($oldroom, $room) |
85 |
|
|
Sends the server a join command for $room. This will result in a |
86 |
|
|
room change from $oldroom to $room. |
87 |
|
|
|
88 |
|
|
$client->send_exit_room ($room) |
89 |
|
|
Exits $room completly. (can be seen as counter method for |
90 |
|
|
"enter_room ()") |
91 |
|
|
|
92 |
|
|
$client->register ($type => $cb) |
93 |
|
|
See Net::Knuddels::Protocol::register. The following extra events |
94 |
|
|
will be generated by this class: |
95 |
|
|
|
96 |
|
|
login |
97 |
|
|
set_nick can only be called _after_ a login event has occured. |
98 |
|
|
|
99 |
|
|
msg_room => $room, $user, $msg |
100 |
|
|
produced when a public message is uttered :) |
101 |
|
|
|
102 |
|
|
msg_priv => $room, $src, $dst, $msg |
103 |
|
|
personal message from $src to $dst. better use msg_priv_nondup, |
104 |
|
|
msg_priv_james or msg_priv_echo |
105 |
|
|
|
106 |
|
|
msg_priv_echo => $room, $src, $dst, $msg |
107 |
|
|
like msg_priv, but only for echoed messages |
108 |
|
|
|
109 |
|
|
msg_priv_james => $room, $src, $dst, $msg |
110 |
|
|
like msg_priv, but only for messages from James |
111 |
|
|
|
112 |
|
|
msg_priv_nondup => $room, $src, $dst, $msg |
113 |
|
|
like msg_priv, but avoids duplicate messages, echos and james. |
114 |
|
|
|
115 |
|
|
user_list => $room, $list |
116 |
|
|
the userlist of a channel named $room, a elmement of the list (a user) |
117 |
|
|
looks like: |
118 |
|
|
{ |
119 |
|
|
name => <name>, |
120 |
|
|
flag => <some flag i don't know what it means>, |
121 |
|
|
color => like /\d+.\d+.\d+/, |
122 |
|
|
age => /\d+/, |
123 |
|
|
gender => /(f|m)/, |
124 |
|
|
picture => <the picture file to put behind the nick> |
125 |
|
|
} |
126 |
|
|
|
127 |
|
|
room_info => $room, $room_info |
128 |
|
|
some information about the $room: |
129 |
|
|
$room_info = |
130 |
|
|
{ |
131 |
|
|
picture => <some picturefile> |
132 |
|
|
} |
133 |
|
|
|
134 |
|
|
join_room => $room, $user |
135 |
|
|
join message of $user joined the room $room |
136 |
|
|
$user contains the user structure (see user_list). |
137 |
|
|
|
138 |
|
|
part_room => $room, $user |
139 |
|
|
part message of $user who left the room $room |
140 |
|
|
$user contains the user structure (see user_list). |
141 |
|
|
=cut |
142 |
|
|
|
143 |
|
|
sub register { my ($self, $type, $cb) = @_; |
144 |
|
|
|
145 |
|
|
$self->{proto}->register ($type, $cb); |
146 |
|
|
} |
147 |
|
|
|
148 |
|
|
AUTHOR |
149 |
|
|
Marc Lehmann <schmorp@schmorp.de> |
150 |
|
|
http://home.schmorp.de/ |
151 |
|
|
|