3.8 KiB
ANALIZA KROK PO KROKU - FLOW WIADOMOŚCI W IRSSI
1. WIADOMOŚCI PRZYCHODZĄCE (od serwera do wyświetlenia)
Krok 1: Odbieranie z serwera
Funkcja: irc_parse_incoming() w src/irc/core/irc.c:543
- Czyta dane z socketu przez
net_sendbuffer_receive_line() - Emituje sygnał
"server incoming"z surową linią
Krok 2: Parsowanie IRC
Funkcja: irc_parse_incoming_line() w src/irc/core/irc.c:528
- Parsuje prefix (nick, address, tags) przez
irc_parse_prefix() - Emituje sygnał
"server event tags"z parsowanymi danymi
Krok 3: Rozpoznanie typu wiadomości
Funkcja: irc_server_event() w src/irc/core/irc.c:370
- Parsuje komendę IRC (PRIVMSG, JOIN, etc.)
- Emituje odpowiedni sygnał np.
"event privmsg"
Krok 4: Konwersja na sygnały wiadomości
Funkcja: event_privmsg() w src/fe-common/irc/fe-events.c:42
- Dekoduje wiadomość przez
recode_in() - Rozróżnia kanał vs prywatna
- Emituje
"message public"lub"message private"
Krok 5: Obsługa sygnału wiadomości
Funkcja: sig_message_public() w src/fe-common/core/fe-messages.c:168
- Znajduje kanał i nick record
- Pobiera nickmode przez
channel_get_nickmode() - Sprawdza highlight przez
hilight_match() - WYWOŁUJE:
printformat_module("fe-common/core", server, target, level, TXT_PUBMSG, nick, address, msg, nickmode)
2. FORMATOWANIE I THEME
Krok 6: printformat_module
Funkcja: printformat_module() w src/fe-common/core/printtext.c:101
- Tworzy
TEXT_DEST_RECprzezformat_create_dest() - Wywołuje
printformat_module_dest_args()
Krok 7: Emisja sygnału formatowania
Funkcja: printformat_module_dest_charargs() w src/fe-common/core/printtext.c:64
- Pobiera theme przez
window_get_theme() - EMITUJE:
signal_emit_id(signal_print_format, 5, theme, module, dest, formatnum, arglist)
Krok 8: Obsługa sygnału formatowania
Funkcja: sig_print_format() w src/fe-common/core/printtext.c:459
- WYWOŁUJE:
format_get_text_theme_charargs(theme, module, dest, formatnum, arglist)
Krok 9: Pobieranie tekstu z theme
Funkcja: format_get_text_theme_charargs() w src/fe-common/core/formats.c:831
- Znajduje moduł theme w
theme->modules - Pobiera expanded format:
text = module_theme->expanded_formats[formatnum] - WYWOŁUJE:
format_get_text_args(dest, text, args)
Krok 10: Parsowanie expandos i zmiennych
Funkcja: format_get_text_args() w src/fe-common/core/formats.c:737
- Iteruje przez tekst formatujący
- Gdy napotka
$, wywołujeparse_special()
Krok 11: Parsowanie expandos
Funkcja: parse_special() w src/core/special-vars.c:425
- Parsuje składnię
$[alignment]variable - WYWOŁUJE:
get_special_value()→get_variable()→get_long_variable_value()
Krok 12: Wykonanie expando
Funkcja: get_long_variable_value() w src/core/special-vars.c:95
- WYWOŁUJE:
func = expando_find_long(key) - WYWOŁUJE:
return func(server, item, free_ret)← TU SĄ NASZE EXPANDOS!
3. WIADOMOŚCI WYCHODZĄCE (nasze wiadomości)
Krok 1: Input od użytkownika
Funkcja: Obsługa klawiatury w src/fe-text/gui-readline.c
- Przechwytuje Enter, wywołuje
signal_emit("send command", ...)
Krok 2: Parsowanie komendy
Funkcja: cmd_msg() lub podobne w src/irc/core/irc-commands.c
- Wysyła PRIVMSG do serwera
- Emituje
"message own_public"lub"message own_private"
Krok 3: Formatowanie własnej wiadomości
Funkcja: sig_message_own_public() w src/fe-common/core/fe-messages.c:281
- Pobiera nickmode przez
channel_get_nickmode(channel, server->nick) - WYWOŁUJE:
printformat_module("fe-common/core", server, target, level, TXT_OWN_MSG, server->nick, target, msg, nickmode)
Dalej flow jest identyczny jak dla wiadomości przychodzących od kroku 6.