36 #define MAX_LEN_CHAT_NAME \
37 (2 * MAX_LEN_NAME + 10)
41 const struct ft_color color,
const char *format,
50 if (
nullptr != sender &&
nullptr != dest) {
80 const struct ft_color color,
const char *format,
83 struct packet_chat_msg packet;
86 va_start(args, format);
90 send_packet_chat_msg(pconn, &packet);
101 switch (player_conn) {
104 _(
"%s is an ambiguous player name-prefix."),
name);
108 _(
"%s is an ambiguous connection name-prefix."),
name);
112 _(
"%s is an anonymous name. Use connection name."),
name);
115 qCritical(
"Unknown variant in %s(): %d.", __FUNCTION__, player_conn);
131 _(
"You cannot send messages to %s; you are ignored."),
142 if (sender != dest) {
152 struct player *pdest,
char *msg)
154 struct packet_chat_msg packet;
166 if (!pconn->observer) {
170 _(
"You cannot send messages to %s; you are ignored."),
185 if (
nullptr != dest && dest != sender) {
195 if (pconn != dest && pconn != sender
197 send_packet_chat_msg(pconn, &packet);
207 send_packet_chat_msg(pconn, &packet);
224 struct packet_chat_msg packet;
243 send_packet_chat_msg(pconn, &packet);
261 struct packet_chat_msg packet;
268 _(
"%s to global observers: %s"), sender_name, msg);
274 send_packet_chat_msg(dest_conn, &packet);
288 struct packet_chat_msg packet;
335 for (cp = real_message; *cp !=
'\0'; cp++) {
336 if (*cp ==
'\n' || *cp ==
'\r') {
359 _(
"You are not attached to a player."));
363 if (
nullptr != pconn->
playing) {
396 if (cp && (cp != &real_message[0])) {
397 enum m_pre_result match_result_player, match_result_conn;
398 struct player *pdest =
nullptr;
404 MIN(
sizeof(
name), cp - real_message + 1));
446 cpblank = strchr(real_message,
' ');
447 if (!cpblank || (cp < cpblank)) {
450 _(
"There is no connection by the name %s."),
name);
453 _(
"There is no player nor connection by the name %s."),
#define CHAT_DIRECT_PREFIX
#define CHAT_ALLIES_PREFIX
#define SERVER_COMMAND_PREFIX
bool conn_is_global_observer(const struct connection *pconn)
Returns TRUE if the given connection is a global observer.
struct connection * conn_by_user_prefix(const char *user_name, enum m_pre_result *result)
bool conn_pattern_list_match(const struct conn_pattern_list *plist, const struct connection *pconn)
Returns TRUE whether the connection fits one of the connection patterns.
#define conn_list_iterate(connlist, pconn)
#define conn_list_iterate_end
void con_write(enum rfc_status rfc_status, const char *message,...)
Write to console and add line-break, and show prompt if required.
const struct ft_color ftc_chat_private
const struct ft_color ftc_server
const struct ft_color ftc_warning
const struct ft_color ftc_chat_public
const struct ft_color ftc_chat_ally
static void static bool conn_is_ignored(const struct connection *sender, const struct connection *dest)
Returns whether 'dest' is ignoring the 'sender' connection.
static void complain_ambiguous(struct connection *pconn, const char *name, int player_conn)
Complain to sender that name was ambiguous.
static void chat_msg_to_player(struct connection *sender, struct player *pdest, char *msg)
Send private message to multi-connected player.
static void send_chat_msg(struct connection *pconn, const struct connection *sender, const struct ft_color color, const char *format,...) fc__attribute((__format__(__printf__
Send a chat message packet.
static void form_chat_name(struct connection *pconn, char *buffer, size_t len)
Formulate a name for this connection, prefering the player name when available and unambiguous (since...
#define MAX_LEN_CHAT_NAME
static void chat_msg_to_all(struct connection *sender, char *msg)
Send private message to all connections.
static void chat_msg_to_allies(struct connection *sender, char *msg)
Send private message to player allies.
static void chat_msg_to_global_observers(struct connection *sender, char *msg)
Send private message to all global observers.
void handle_chat_msg_req(struct connection *pconn, const char *message)
Handle a chat message packet from client:
static void chat_msg_to_conn(struct connection *sender, struct connection *dest, char *msg)
Send private message to single connection.
struct event_cache_players * event_cache_player_add(struct event_cache_players *players, const struct player *pplayer)
Select players for event_cache_add_for_players().
void package_chat_msg(struct packet_chat_msg *packet, const struct connection *sender, const struct ft_color color, const char *format,...)
Fill a packet_chat_msg structure for a chat message.
void event_cache_add_for_players(const struct packet_chat_msg *packet, struct event_cache_players *players)
Add an event to the cache for selected players.
void notify_conn(struct conn_list *dest, const struct tile *ptile, enum event_type event, const struct ft_color color, const char *format,...)
See notify_conn_packet - this is just the "non-v" version, with varargs.
void event_cache_add_for_global_observers(const struct packet_chat_msg *packet)
Add an event to the cache for all global observers.
void vpackage_chat_msg(struct packet_chat_msg *packet, const struct connection *sender, const struct ft_color color, const char *format, va_list vargs)
Fill a packet_chat_msg structure for a chat message.
void event_cache_add_for_all(const struct packet_chat_msg *packet)
Add an event to the cache for all connections.
struct player * player_by_name_prefix(const char *name, enum m_pre_result *result)
Find player by its name prefix.
const char * player_name(const struct player *pplayer)
Return the leader name of the player.
bool pplayers_allied(const struct player *pplayer, const struct player *pplayer2)
Returns true iff players are allied.
#define players_iterate_end
#define players_iterate(_pplayer)
char * skip_leading_spaces(char *s)
Returns 's' incremented to first non-space character.
bool handle_stdin_input(struct connection *caller, char *str)
Main entry point for "command input".
struct conn_list * est_connections
char username[MAX_LEN_NAME]
struct conn_list * connections
int fc_snprintf(char *str, size_t n, const char *format,...)
See also fc_utf8_snprintf_trunc(), fc_utf8_snprintf_rep().
size_t fc_strlcpy(char *dest, const char *src, size_t n)
fc_strlcpy() provides utf-8 version of (non-standard) function strlcpy() It is intended as more user-...
#define sz_strlcpy(dest, src)
int fc__attribute((nonnull(1, 3)))