22 // twiddle state |
22 // twiddle state |
23 chan->state.joining = false; |
23 chan->state.joining = false; |
24 chan->state.joined = true; |
24 chan->state.joined = true; |
25 |
25 |
26 log_info("joined channel: %s", chan->info.channel); |
26 log_info("joined channel: %s", chan->info.channel); |
|
27 |
|
28 // invoke callback |
|
29 IRC_CHAN_INVOKE_CALLBACK(chan, on_self_join); |
|
30 } |
|
31 } |
27 |
32 |
28 // TODO: callbacks |
33 /** |
29 } |
34 * :nm PRIVMSG <channel> <message> |
|
35 */ |
|
36 static void irc_chan_on_PRIVMSG (const struct irc_line *line, void *arg) |
|
37 { |
|
38 struct irc_chan *chan = arg; |
|
39 |
|
40 // invoke callback (prefix, message) |
|
41 IRC_CHAN_INVOKE_CALLBACK(chan, on_msg, line->prefix, line->args[1]); |
30 } |
42 } |
31 |
43 |
32 /** |
44 /** |
33 * Core command handlers |
45 * Core command handlers |
34 */ |
46 */ |
35 struct irc_cmd_handler _cmd_handlers[] = { |
47 struct irc_cmd_handler _cmd_handlers[] = { |
36 { "JOIN", &irc_chan_on_JOIN }, |
48 { "JOIN", &irc_chan_on_JOIN }, |
37 { NULL, NULL } |
49 { "PRIVMSG", &irc_chan_on_PRIVMSG }, |
|
50 { NULL, NULL } |
38 }; |
51 }; |
39 |
52 |
40 err_t irc_chan_create (struct irc_chan **chan_ptr, struct irc_net *net, const struct irc_chan_info *info, struct error_info *err) |
53 err_t irc_chan_create (struct irc_chan **chan_ptr, struct irc_net *net, const struct irc_chan_info *info, struct error_info *err) |
41 { |
54 { |
42 struct irc_chan *chan; |
55 struct irc_chan *chan; |
71 void irc_chan_destroy (struct irc_chan *chan) |
85 void irc_chan_destroy (struct irc_chan *chan) |
72 { |
86 { |
73 // free command handlers |
87 // free command handlers |
74 irc_cmd_free(&chan->handlers); |
88 irc_cmd_free(&chan->handlers); |
75 |
89 |
|
90 // free callbacks |
|
91 chain_free(&chan->callbacks); |
|
92 |
76 // free chan itself |
93 // free chan itself |
77 free(chan); |
94 free(chan); |
|
95 } |
|
96 |
|
97 err_t irc_chan_add_callbacks (struct irc_chan *chan, const struct irc_chan_callbacks *callbacks, void *arg) |
|
98 { |
|
99 return chain_add(&chan->callbacks, callbacks, arg); |
78 } |
100 } |
79 |
101 |
80 err_t irc_chan_join (struct irc_chan *chan) |
102 err_t irc_chan_join (struct irc_chan *chan) |
81 { |
103 { |
82 err_t err; |
104 err_t err; |