1 /**********************************************************************
2  Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
3    This program is free software; you can redistribute it and/or modify
4    it under the terms of the GNU General Public License as published by
5    the Free Software Foundation; either version 2, or (at your option)
6    any later version.
7 
8    This program is distributed in the hope that it will be useful,
9    but WITHOUT ANY WARRANTY; without even the implied warranty of
10    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11    GNU General Public License for more details.
12 ***********************************************************************/
13 #ifndef FC__NOTIFY_H
14 #define FC__NOTIFY_H
15 
16 #include <stdarg.h>
17 
18 /* utility */
19 #include "support.h"            /* fc__attribute */
20 
21 /* common */
22 #include "events.h"
23 #include "fc_types.h"
24 #include "featured_text.h"      /* ftc_*: color pre-definitions. */
25 #include "packets.h"
26 
27 /* server */
28 #include "srv_main.h"           /* enum server_states */
29 
30 struct research;
31 
32 
33 void package_chat_msg(struct packet_chat_msg *packet,
34                       const struct connection *sender,
35                       const struct ft_color color,
36                       const char *format, ...)
37                       fc__attribute((__format__ (__printf__, 4, 5)));
38 void vpackage_chat_msg(struct packet_chat_msg *packet,
39                        const struct connection *sender,
40                        const struct ft_color color,
41                        const char *format,
42                        va_list vargs);
43 void package_event(struct packet_chat_msg *packet,
44                    const struct tile *ptile,
45                    enum event_type event,
46                    const struct ft_color color,
47                    const char *format, ...)
48                    fc__attribute((__format__ (__printf__, 5, 6)));
49 void vpackage_event(struct packet_chat_msg *packet,
50                     const struct tile *ptile,
51                     enum event_type event,
52                     const struct ft_color color,
53                     const char *format,
54                     va_list vargs);
55 
56 void notify_conn(struct conn_list *dest,
57                  const struct tile *ptile,
58                  enum event_type event,
59                  const struct ft_color color,
60                  const char *format, ...)
61                  fc__attribute((__format__ (__printf__, 5, 6)));
62 void notify_conn_early(struct conn_list *dest,
63                        const struct tile *ptile,
64                        enum event_type event,
65                        const struct ft_color color,
66                        const char *format, ...)
67                        fc__attribute((__format__ (__printf__, 5, 6)));
68 void notify_player(const struct player *pplayer,
69                    const struct tile *ptile,
70                    enum event_type event,
71                    const struct ft_color color,
72                    const char *format, ...)
73                    fc__attribute((__format__ (__printf__, 5, 6)));
74 void notify_embassies(const struct player *pplayer,
75                       const struct tile *ptile,
76                       enum event_type event,
77                       const struct ft_color color,
78                       const char *format, ...)
79                       fc__attribute((__format__ (__printf__, 5, 6)));
80 void notify_team(const struct player *pplayer,
81                  const struct tile *ptile,
82                  enum event_type event,
83                  const struct ft_color color,
84                  const char *format, ...)
85                  fc__attribute((__format__ (__printf__, 5, 6)));
86 void notify_research(const struct research *presearch,
87                      const struct player *exclude,
88                      enum event_type event,
89                      const struct ft_color color,
90                      const char *format, ...)
91                      fc__attribute((__format__ (__printf__, 5, 6)));
92 void notify_research_embassies(const struct research *presearch,
93                                const struct player *exclude,
94                                enum event_type event,
95                                const struct ft_color color,
96                                const char *format, ...)
97                                fc__attribute((__format__ (__printf__, 5, 6)));
98 
99 /* Event cache. */
100 
101 /* The type of event target. */
102 struct event_cache_players;
103 
104 void event_cache_init(void);
105 void event_cache_free(void);
106 void event_cache_clear(void);
107 void event_cache_remove_old(void);
108 
109 void event_cache_add_for_all(const struct packet_chat_msg *packet);
110 void event_cache_add_for_global_observers(const struct packet_chat_msg *packet);
111 void event_cache_add_for_player(const struct packet_chat_msg *packet,
112                                 const struct player *pplayer);
113 struct event_cache_players *
114 event_cache_player_add(struct event_cache_players *players,
115                        const struct player *pplayer)
116                        fc__warn_unused_result;
117 void event_cache_add_for_players(const struct packet_chat_msg *packet,
118                                  struct event_cache_players *players);
119 
120 void send_pending_events(struct connection *pconn, bool include_public);
121 
122 void event_cache_phases_invalidate(void);
123 
124 struct section_file;
125 void event_cache_load(struct section_file *file, const char *section);
126 void event_cache_save(struct section_file *file, const char *section);
127 
128 #endif  /* FC__NOTIFY_H */
129