project_files/frontlib/net/netconn.h
author Wuzzy <almikes@aol.com>
Mon, 25 Sep 2017 20:09:33 +0200
changeset 12520 22f2a586b9ca
parent 10017 de822cd3df3a
permissions -rw-r--r--
Remove checkpoints in ASA: Getting to the device This means the player now must win this mission in one go. Justification: There were many ways for the mission to be saved in an unwinnable state, there are many ways to win this mission and the checkpoints try to "force" one particular way. Also, this mission isn't too long anyway.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
     1
/*
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
     2
 * Hedgewars, a free turn based strategy game
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
     3
 * Copyright (C) 2012 Simeon Maxein <smaxein@googlemail.com>
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
     4
 *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
     5
 * This program is free software; you can redistribute it and/or
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
     6
 * modify it under the terms of the GNU General Public License
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
     7
 * as published by the Free Software Foundation; either version 2
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
     8
 * of the License, or (at your option) any later version.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
     9
 *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    13
 * GNU General Public License for more details.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    14
 *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    15
 * You should have received a copy of the GNU General Public License
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    16
 * along with this program; if not, write to the Free Software
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    18
 */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    19
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    20
/**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    21
 * This file contains functions for communicating with a Hedgewars server to chat, prepare and play
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    22
 * rounds of Hedgewars.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    23
 *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    24
 * To use this, first create a netconn object by calling flib_netconn_create. This will start the
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    25
 * connection to the game server (which might fail right away, the function returns null then). You
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    26
 * should also register your callback functions right at the start to ensure you don't miss any
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    27
 * callbacks.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    28
 *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    29
 * In order to allow the netconn to run, you should regularly call flib_netconn_tick(), which
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    30
 * performs network I/O and calls your callbacks on interesting events.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    31
 *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    32
 * When the connection is closed, you will receive the onDisconnect callback. This is the signal to
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    33
 * destroy the netconn and stop calling tick().
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    34
 *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    35
 * The connection process lasts from the time you create the netconn until you receive the
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    36
 * onConnected callback (or onDisconnected in case something goes wrong). During that time, you
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    37
 * might receive the onNickTaken and onPasswordRequest callbacks; see their description for more
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    38
 * information on how to handle them. You could also receive other callbacks during connecting (e.g.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    39
 * about the room list), but it should be safe to ignore them.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    40
 *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    41
 * Once you are connected, you are in the lobby, and you can enter rooms and leave them again. The
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    42
 * room and lobby states have different protocols, so many commands only work in either one or the
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    43
 * other. If you are in a room you might also be in a game, but most of the functions behave the
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    44
 * same ingame as in a room.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    45
 *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    46
 * The state changes from lobby to room when the server tells you that you just entered one, which
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    47
 * will also trigger the onEnterRoom callback. This usually happens in reply to either a joinRoom,
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    48
 * createRoom or playerFollow command.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    49
 *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    50
 * The state changes back to lobby when the room is dissolved, when you are kicked from the room, or
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    51
 * when you actively leave the room using flib_netconn_send_leaveRoom. The first two events will
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    52
 * trigger the onLeaveRoom callback.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    53
 */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    54
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    55
#ifndef NETCONN_H_
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    56
#define NETCONN_H_
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    57
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    58
#include "../model/gamesetup.h"
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    59
#include "../model/scheme.h"
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    60
#include "../model/room.h"
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    61
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    62
#include <stddef.h>
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    63
#include <stdint.h>
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    64
#include <stdbool.h>
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    65
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    66
#define NETCONN_STATE_CONNECTING 0
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    67
#define NETCONN_STATE_LOBBY 1
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    68
#define NETCONN_STATE_ROOM 2
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    69
#define NETCONN_STATE_DISCONNECTED 10
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    70
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    71
#define NETCONN_DISCONNECT_NORMAL 0             //!< The connection was closed normally
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    72
#define NETCONN_DISCONNECT_SERVER_TOO_OLD 1     //!< The server has a lower protocol version than we do
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    73
#define NETCONN_DISCONNECT_AUTH_FAILED 2        //!< You sent a password with flib_netconn_send_password that was not accepted
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    74
#define NETCONN_DISCONNECT_CONNLOST 3           //!< The network connection was lost
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    75
#define NETCONN_DISCONNECT_INTERNAL_ERROR 100   //!< Something went wrong in frontlib itself
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    76
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    77
#define NETCONN_ROOMLEAVE_ABANDONED 0           //!< The room was closed because the chief left
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    78
#define NETCONN_ROOMLEAVE_KICKED 1              //!< You have been kicked from the room
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    79
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    80
#define NETCONN_MSG_TYPE_PLAYERINFO 0           //!< A response to flib_netconn_send_playerInfo
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    81
#define NETCONN_MSG_TYPE_SERVERMESSAGE 1        //!< The welcome message when connecting to the lobby
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    82
#define NETCONN_MSG_TYPE_WARNING 2              //!< A general warning message
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    83
#define NETCONN_MSG_TYPE_ERROR 3                //!< A general error message
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    84
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    85
#define NETCONN_MAPCHANGE_FULL 0
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    86
#define NETCONN_MAPCHANGE_MAP 1
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    87
#define NETCONN_MAPCHANGE_MAPGEN 2
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    88
#define NETCONN_MAPCHANGE_DRAWNMAP 3
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    89
#define NETCONN_MAPCHANGE_MAZE_SIZE 4
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    90
#define NETCONN_MAPCHANGE_TEMPLATE 5
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    91
#define NETCONN_MAPCHANGE_THEME 6
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    92
#define NETCONN_MAPCHANGE_SEED 7
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    93
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    94
typedef struct _flib_netconn flib_netconn;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    95
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    96
/**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    97
 * Create a new netplay connection with these parameters.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    98
 * The path to the data directory must end with a path delimiter (e.g. C:\Games\Hedgewars\Data\)
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    99
 */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   100
flib_netconn *flib_netconn_create(const char *playerName, const char *dataDirPath, const char *host, int port);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   101
void flib_netconn_destroy(flib_netconn *conn);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   102
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   103
/**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   104
 * Perform I/O operations and call callbacks if something interesting happens.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   105
 * Should be called regularly.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   106
 */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   107
void flib_netconn_tick(flib_netconn *conn);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   108
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   109
/**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   110
 * Are you currently the owner of this room? The return value only makes sense in
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   111
 * NETCONN_STATE_ROOM and NETCONN_STATE_INGAME states.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   112
 */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   113
bool flib_netconn_is_chief(flib_netconn *conn);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   114
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   115
/**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   116
 * Returns the playername. This is *probably* the one provided on creation, but if that name was
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   117
 * already taken, a different one could have been set by the onNickTaken callback or its default
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   118
 * implementation.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   119
 */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   120
const char *flib_netconn_get_playername(flib_netconn *conn);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   121
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   122
/**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   123
 * Generate a game setup from the current room state.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   124
 * Returns NULL if the room state does not contain enough information for a complete game setup,
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   125
 * or if an error occurs.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   126
 *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   127
 * The new gamesetup must be destroyed with flib_gamesetup_destroy().
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   128
 */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   129
flib_gamesetup *flib_netconn_create_gamesetup(flib_netconn *conn);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   130
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   131
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   132
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   133
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   134
// Send functions needed when connecting and disconnecting
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   135
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   136
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   137
     * Request a different nickname.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   138
     * This function only makes sense in reaction to an onNickTaken callback, because the netconn
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   139
     * automatically requests the nickname you provide on creation, and once the server accepts the
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   140
     * nickname it can no longer be changed.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   141
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   142
    int flib_netconn_send_nick(flib_netconn *conn, const char *nick);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   143
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   144
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   145
     * Send the password in reply to a password request.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   146
     * If the server does not accept the password, you will be disconnected
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   147
     * (NETCONN_DISCONNECT_AUTH_FAILED)
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   148
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   149
    int flib_netconn_send_password(flib_netconn *conn, const char *passwd);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   150
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   151
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   152
     * Tell the server that you want to leave. If successful, the server will disconnect you.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   153
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   154
    int flib_netconn_send_quit(flib_netconn *conn, const char *quitmsg);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   155
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   156
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   157
// Send functions that make sense both in the lobby and in rooms
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   158
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   159
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   160
     * Send a chat message. This message is either sent to the lobby or the room, depending on
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   161
     * whether you are in a room at the moment. The message is not echoed back to you.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   162
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   163
    int flib_netconn_send_chat(flib_netconn *conn, const char *chat);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   164
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   165
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   166
     * Kick a player. This has different meanings in the lobby and in a room;
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   167
     * In the lobby, it will kick the player from the server, and you need to be a server admin to
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   168
     * do it. In a room, it will kick the player from the room, and you need to be room chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   169
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   170
    int flib_netconn_send_kick(flib_netconn *conn, const char *playerName);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   171
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   172
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   173
     * Request information about a player (e.g. current room, version, partial IP). If the action
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   174
     * succeeds, you will receive an onMessage callback with NETCONN_MSG_TYPE_PLAYERINFO containing
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   175
     * the requested information.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   176
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   177
    int flib_netconn_send_playerInfo(flib_netconn *conn, const char *playerName);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   178
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   179
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   180
// Send functions that only make sense in the lobby
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   181
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   182
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   183
     * Request an update of the room list. Only makes sense when in lobby state.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   184
     * If the action succeeds, you will receive an onRoomlist callback containing the current room
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   185
     * data.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   186
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   187
    int flib_netconn_send_request_roomlist(flib_netconn *conn);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   188
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   189
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   190
     * Join a room as guest (not chief). Only makes sense when in lobby state. If the action
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   191
     * succeeds, you will receive an onEnterRoom callback with chief=false followed by other
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   192
     * callbacks with current room information.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   193
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   194
    int flib_netconn_send_joinRoom(flib_netconn *conn, const char *room);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   195
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   196
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   197
     * Follow a player. Only valid in the lobby. If the player is in a room (or in a game), this
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   198
     * command is analogous to calling flib_netconn_send_joinRoom with that room.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   199
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   200
    int flib_netconn_send_playerFollow(flib_netconn *conn, const char *playerName);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   201
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   202
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   203
     * Create and join a new room. Only makes sense when in lobby state. If the action succeeds,
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   204
     * you will receive an onEnterRoom callback with chief=true.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   205
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   206
    int flib_netconn_send_createRoom(flib_netconn *conn, const char *room);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   207
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   208
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   209
     * Ban a player. The scope of this ban depends on whether you are in a room or in the lobby.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   210
     * In a room, you need to be the room chief, and the ban will apply to the room only. In the
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   211
     * lobby, you need to be server admin to ban someone, and the ban applies to the entire server.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   212
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   213
    int flib_netconn_send_ban(flib_netconn *conn, const char *playerName);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   214
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   215
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   216
     * Does something administrator-y. At any rate you need to be an administrator and in the lobby
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   217
     * to use this command.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   218
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   219
    int flib_netconn_send_clearAccountsCache(flib_netconn *conn);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   220
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   221
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   222
     * Sets a server variable to the indicated value. Only makes sense if you are server admin and
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   223
     * in the lobby. Known variables are MOTD_NEW, MOTD_OLD and LATEST_PROTO. MOTD_OLD is shown to
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   224
     * players with older protocol versions, to inform them that they might want to update.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   225
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   226
    int flib_netconn_send_setServerVar(flib_netconn *conn, const char *name, const char *value);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   227
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   228
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   229
     * Queries all server variables. Only makes sense if you are server admin and in the lobby.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   230
     * If the action succeeds, you will receive several onServerVar callbacks with the
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   231
     * current values of all server variables.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   232
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   233
    int flib_netconn_send_getServerVars(flib_netconn *conn);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   234
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   235
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   236
// Send functions that only make sense in a room
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   237
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   238
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   239
     * Leave the room for the lobby. Only makes sense in room state. msg can be NULL if you don't
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   240
     * want to send a message. The server always accepts a part command, so once you send it off,
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   241
     * you can just assume that you are back in the lobby.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   242
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   243
    int flib_netconn_send_leaveRoom(flib_netconn *conn, const char *msg);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   244
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   245
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   246
     * Change your "ready" status in the room. Only makes sense when in room state. If the action
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   247
     * succeeds, you will receive an onClientFlags callback containing the change.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   248
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   249
    int flib_netconn_send_toggleReady(flib_netconn *conn);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   250
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   251
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   252
     * Add a team to the current room. Apart from the "fixed" team information, this also includes
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   253
     * the color, but not the number of hogs. Only makes sense when in room state. If the action
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   254
     * succeeds, you will receive an onTeamAccepted callback with the name of the team.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   255
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   256
     * Notes: Technically, sending a color here is the only way for a non-chief to set the color of
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   257
     * her own team. The server remembers this color and even generates a separate teamColor message
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   258
     * to inform everyone of it. However, at the moment the frontends generally override this color
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   259
     * with one they choose themselves in order to deal with unfortunate behavior of the QtFrontend,
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   260
     * which always sends color index 0 when adding a team but thinks that the team has a random
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   261
     * color. The chief always sends a new color in order to bring the QtFrontend back into sync.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   262
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   263
    int flib_netconn_send_addTeam(flib_netconn *conn, const flib_team *team);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   264
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   265
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   266
     * Remove the team with the name teamname. Only makes sense when in room state.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   267
     * The server does not send a reply on success.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   268
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   269
    int flib_netconn_send_removeTeam(flib_netconn *conn, const char *teamname);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   270
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   271
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   272
// Send functions that only make sense in a room and if you are room chief
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   273
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   274
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   275
     * Rename the current room. Only makes sense in room state and if you are chief. If the action
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   276
     * succeeds, you (and everyone else on the server) will receive an onRoomUpdate message
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   277
     * containing the change.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   278
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   279
    int flib_netconn_send_renameRoom(flib_netconn *conn, const char *roomName);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   280
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   281
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   282
     * Set the number of hogs for a team. Only makes sense in room state and if you are chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   283
     * The server does not send a reply.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   284
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   285
    int flib_netconn_send_teamHogCount(flib_netconn *conn, const char *teamname, int hogcount);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   286
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   287
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   288
     * Set the teamcolor of a team. Only makes sense in room state and if you are chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   289
     * The server does not send a reply.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   290
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   291
    int flib_netconn_send_teamColor(flib_netconn *conn, const char *teamname, int colorIndex);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   292
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   293
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   294
     * Set the weaponset for the room. Only makes sense in room state and if you are chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   295
     * The server does not send a reply.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   296
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   297
    int flib_netconn_send_weaponset(flib_netconn *conn, const flib_weaponset *weaponset);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   298
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   299
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   300
     * Set the map for the room. Only makes sense in room state and if you are chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   301
     * The server does not send a reply.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   302
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   303
    int flib_netconn_send_map(flib_netconn *conn, const flib_map *map);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   304
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   305
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   306
     * Set the mapname. Only makes sense in room state and if you are chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   307
     * The server does not send a reply.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   308
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   309
    int flib_netconn_send_mapName(flib_netconn *conn, const char *mapName);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   310
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   311
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   312
     * Set the map generator (regular, maze, drawn, named). Only makes sense in room state and if
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   313
     * you are chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   314
     * The server does not send a reply.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   315
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   316
    int flib_netconn_send_mapGen(flib_netconn *conn, int mapGen);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   317
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   318
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   319
     * Set the map template for regular maps. Only makes sense in room state and if you are chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   320
     * The server does not send a reply.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   321
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   322
    int flib_netconn_send_mapTemplate(flib_netconn *conn, int templateFilter);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   323
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   324
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   325
     * Set the maze template (maze size) for mazes. Only makes sense in room state and if you are
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   326
     * chief. The server does not send a reply.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   327
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   328
    int flib_netconn_send_mapMazeSize(flib_netconn *conn, int mazeSize);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   329
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   330
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   331
     * Set the seed for the map. Only makes sense in room state and if you are chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   332
     * The server does not send a reply.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   333
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   334
    int flib_netconn_send_mapSeed(flib_netconn *conn, const char *seed);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   335
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   336
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   337
     * Set the theme for the map. Only makes sense in room state and if you are chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   338
     * The server does not send a reply.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   339
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   340
    int flib_netconn_send_mapTheme(flib_netconn *conn, const char *theme);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   341
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   342
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   343
     * Set the draw data for the drawn map. Only makes sense in room state and if you are chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   344
     * The server does not send a reply.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   345
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   346
    int flib_netconn_send_mapDrawdata(flib_netconn *conn, const uint8_t *drawData, size_t size);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   347
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   348
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   349
     * Set the script (game style). Only makes sense in room state and if you are chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   350
     * The server does not send a reply.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   351
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   352
    int flib_netconn_send_script(flib_netconn *conn, const char *scriptName);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   353
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   354
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   355
     * Set the scheme. Only makes sense in room state and if you are chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   356
     * The server does not send a reply.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   357
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   358
    int flib_netconn_send_scheme(flib_netconn *conn, const flib_scheme *scheme);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   359
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   360
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   361
     * Signal that you want to start the game. Only makes sense in room state and if you are chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   362
     * The server will check whether all players are ready and whether it believes the setup makes
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   363
     * sense (e.g. more than one clan). If the server is satisfied, you will receive an onRunGame
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   364
     * callback (all other clients in the room are notified the same way). Otherwise the server
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   365
     * might answer with a warning, or might not answer at all.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   366
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   367
    int flib_netconn_send_startGame(flib_netconn *conn);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   368
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   369
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   370
     * Allow/forbid players to join the room. Only makes sense in room state and if you are chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   371
     * The server does not send a reply.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   372
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   373
    int flib_netconn_send_toggleRestrictJoins(flib_netconn *conn);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   374
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   375
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   376
     * Allow/forbid adding teams to the room. Only makes sense in room state and if you are chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   377
     * The server does not send a reply.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   378
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   379
    int flib_netconn_send_toggleRestrictTeams(flib_netconn *conn);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   380
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   381
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   382
// Send functions that are only needed for running a game
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   383
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   384
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   385
     * Send a teamchat message, forwarded from the engine. Only makes sense ingame.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   386
     * The server does not send a reply. In contrast to a Chat message, the server
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   387
     * automatically converts this into an engine message and passes it on to the other
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   388
     * clients.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   389
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   390
    int flib_netconn_send_teamchat(flib_netconn *conn, const char *msg);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   391
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   392
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   393
     * Send an engine message. Only makes sense when ingame. In a networked game, you have to pass
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   394
     * all the engine messages from the engine here, and they will be spread to all other clients
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   395
     * in the game to keep the game in sync.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   396
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   397
    int flib_netconn_send_engineMessage(flib_netconn *conn, const uint8_t *message, size_t size);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   398
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   399
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   400
     * Inform the server that the round has ended. Call this when the engine has disconnected,
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   401
     * passing 1 if the round ended normally, 0 otherwise.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   402
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   403
    int flib_netconn_send_roundfinished(flib_netconn *conn, bool withoutError);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   404
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   405
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   406
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   407
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   408
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   409
// Callbacks that are important for connecting/disconnecting
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   410
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   411
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   412
     * onNickTaken is called when connecting to the server, if it turns out that there is already a
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   413
     * player with the same nick.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   414
     * In order to proceed, a new nickname needs to be sent to the server using
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   415
     * flib_netconn_send_nick() (or of course you can bail out and send a QUIT).
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   416
     * If you don't set a callback, the netconn will automatically react by generating a new name.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   417
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   418
    void flib_netconn_onNickTaken(flib_netconn *conn, void (*callback)(void *context, const char *nick), void* context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   419
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   420
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   421
     * When connecting with a registered nickname, the server will ask for a password before
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   422
     * admitting you in. This callback is called when that happens. As a reaction, you can send the
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   423
     * password using flib_netconn_send_password. If you don't register a callback, the default
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   424
     * behavior is to just quit in a way that will cause a disconnect with
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   425
     * NETCONN_DISCONNECT_AUTH_FAILED.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   426
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   427
     * You can't just choose a new nickname when you receive this callback, because at that point
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   428
     * the server has already accepted your nick.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   429
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   430
    void flib_netconn_onPasswordRequest(flib_netconn *conn, void (*callback)(void *context, const char *nick), void* context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   431
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   432
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   433
     * This is called when the server has accepted our nickname (and possibly password) and we have
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   434
     * entered the lobby.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   435
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   436
    void flib_netconn_onConnected(flib_netconn *conn, void (*callback)(void *context), void* context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   437
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   438
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   439
     * This is always the last callback (unless the netconn is destroyed early), and the netconn
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   440
     * should be destroyed when it is received. The reason for the disconnect is passed as one of
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   441
     * the NETCONN_DISCONNECT_ constants. Sometimes a message is included as well, but that
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   442
     * parameter might also be NULL.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   443
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   444
    void flib_netconn_onDisconnected(flib_netconn *conn, void (*callback)(void *context, int reason, const char *message), void* context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   445
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   446
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   447
// Callbacks that make sense in most situations
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   448
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   449
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   450
     * Callback for several informational messages that should be displayed to the user
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   451
     * (e.g. in the chat window), but do not require a reaction. If a game is running, you might
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   452
     * want to redirect some of these messages to the engine as well so the user will see them.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   453
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   454
    void flib_netconn_onMessage(flib_netconn *conn, void (*callback)(void *context, int msgtype, const char *msg), void* context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   455
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   456
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   457
     * We received a chat message. Where this message belongs depends on the current state
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   458
     * (lobby/room). If a game is running the message should be passed to the engine.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   459
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   460
    void flib_netconn_onChat(flib_netconn *conn, void (*callback)(void *context, const char *nick, const char *msg), void* context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   461
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   462
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   463
     * Callbacks for incremental room list updates. They will fire whenever these events occur,
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   464
     * even before you first query the actual roomlist - so be sure not to blindly reference your
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   465
     * room list in these callbacks. The server currently only sends updates when a room changes
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   466
     * its name, so in order to update other room information you need to query the roomlist again
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   467
     * (see send_request_roomlist / onRoomlist).
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   468
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   469
    void flib_netconn_onRoomAdd(flib_netconn *conn, void (*callback)(void *context, const flib_room *room), void* context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   470
    void flib_netconn_onRoomDelete(flib_netconn *conn, void (*callback)(void *context, const char *name), void* context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   471
    void flib_netconn_onRoomUpdate(flib_netconn *conn, void (*callback)(void *context, const char *oldName, const flib_room *room), void* context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   472
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   473
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   474
     * Callbacks for players joining or leaving the lobby. In contrast to the roomlist updates, you
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   475
     * will get a JOIN callback for every player already on the server when you join (and there is
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   476
     * no direct way to query the current playerlist)
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   477
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   478
     * NOTE: partMessage may be NULL.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   479
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   480
    void flib_netconn_onLobbyJoin(flib_netconn *conn, void (*callback)(void *context, const char *nick), void* context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   481
    void flib_netconn_onLobbyLeave(flib_netconn *conn, void (*callback)(void *context, const char *nick, const char *partMessage), void* context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   482
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   483
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   484
     * This is called when the server informs us that one or more flags associated with a
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   485
     * player/client have changed.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   486
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   487
     * nick is the name of the player, flags is a string containing one character for each modified
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   488
     * flag (see below), and newFlagState signals whether the flags should be set to true or false.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   489
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   490
     * Some of these flags are important for protocol purposes (especially if they are set for you)
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   491
     * while others are just informational. Also, some flags are only relevant for players who are
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   492
     * in the same room as you, and the server will not inform you if they change for others.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   493
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   494
     * These are the currently known/used flags:
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   495
     * a: Server admin. Always updated.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   496
     * h: Room chief. Updated when in the same room.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   497
     * r: Ready to play. Updated when in the same room.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   498
     * u: Registered user. Always updated.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   499
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   500
     * The server tells us the 'a' and 'u' flags for all players when we first join the lobby, and
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   501
     * also tells us the 'r' and 'h' flags when we join or create a room. It assumes that all flags
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   502
     * are initially false, so it will typically only tell you to set certain flags to true when
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   503
     * transmitting the initial states. Reset the 'h' and 'r' flags to false when leaving a room,
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   504
     * or when entering room state, to arrive at the right state for each player.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   505
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   506
     * The room chief state of yourself is particularly important because it determines whether you
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   507
     * can modify settings of the current room. Generally, when you create a room you start out
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   508
     * being room chief, and when you join an existing room you are not. However, if the original
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   509
     * chief leaves a room, the server can choose a new chief, and if that happens the chief flag
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   510
     * will be transferred to someone else.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   511
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   512
    void flib_netconn_onClientFlags(flib_netconn *conn, void (*callback)(void *context, const char *nick, const char *flags, bool newFlagState), void *context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   513
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   514
// Callbacks that happen only in response to specific requests
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   515
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   516
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   517
     * Response to flib_netconn_send_request_roomlist().
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   518
     * The rooms array contains the current state of all rooms on the server.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   519
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   520
    void flib_netconn_onRoomlist(flib_netconn *conn, void (*callback)(void *context, const flib_room **rooms, int roomCount), void* context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   521
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   522
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   523
     * Response to flib_netconn_send_joinRoom, flib_netconn_send_playerFollow or
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   524
     * flib_netconn_send_createRoom.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   525
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   526
     * You just left the lobby and entered a room.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   527
     * If chief is true, you can and should send a full configuration for the room now. This
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   528
     * consists of ammo, scheme, script and map, where map apparently has to come last.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   529
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   530
    void flib_netconn_onEnterRoom(flib_netconn *conn, void (*callback)(void *context, bool chief), void *context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   531
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   532
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   533
     * Response to flib_netconn_send_addTeam.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   534
     * The server might reject your team for several reasons, e.g. because it has the same name as
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   535
     * an existing team, or because the room chief restricted adding new teams. If the team is
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   536
     * accepted by the server, this callback is fired.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   537
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   538
     * If you are the room chief, you are expected to provide the hog count for your own team now
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   539
     * using flib_netconn_send_teamHogCount. The color of the team is already set to the one you
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   540
     * provided in addTeam.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   541
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   542
    void flib_netconn_onTeamAccepted(flib_netconn *conn, void (*callback)(void *context, const char *team), void *context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   543
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   544
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   545
     * When you query the server vars with flib_netconn_send_getServerVars (only works as admin),
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   546
     * the server replies with a list of them. This callback is called for each entry in that list.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   547
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   548
    void flib_netconn_onServerVar(flib_netconn *conn, void (*callback)(void *context, const char *name, const char *value), void *context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   549
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   550
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   551
// Callbacks that are only relevant in a room
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   552
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   553
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   554
     * You just left a room and entered the lobby again.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   555
     * reason is one of the NETCONN_ROOMLEAVE_ constants (usually a kick).
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   556
     * This will not be called when you actively leave a room using PART.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   557
     * Don't confuse with onRoomLeave, which indicates that *someone else* left the room.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   558
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   559
    void flib_netconn_onLeaveRoom(flib_netconn *conn, void (*callback)(void *context, int reason, const char *message), void *context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   560
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   561
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   562
     * Someone joined or left the room you are currently in.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   563
     * Analogous to onLobbyJoin/leave, you will receive the join callback for all players that are
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   564
     * already in the room when you join, including for yourself (this is actually how it is
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   565
     * determined that you joined a room).
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   566
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   567
     * However, you will *not* receive onRoomLeave messages for everyone when you leave the room.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   568
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   569
    void flib_netconn_onRoomJoin(flib_netconn *conn, void (*callback)(void *context, const char *nick), void* context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   570
    void flib_netconn_onRoomLeave(flib_netconn *conn, void (*callback)(void *context, const char *nick, const char *partMessage), void* context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   571
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   572
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   573
     * A new team was added to the room. The person who adds a team does NOT receive this callback
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   574
     * (he gets onTeamAccepted instead).
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   575
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   576
     * The team does not contain bindings, stats, weaponset, color or the number of hogs (but it is
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   577
     * assumed to be the default of 4).
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   578
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   579
     * If you receive this message and you are the room chief, you may want to send a color and hog
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   580
     * count for this team using flib_netconn_send_teamHogCount / teamColor for QtFrontend
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   581
     * compatibility.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   582
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   583
     * The server currently sends another message with the color of the team to the same recipients
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   584
     * as this teamAdd message, which will trigger an onTeamColorChanged callback. See the
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   585
     * description of flib_netconn_send_addTeam for more information.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   586
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   587
    void flib_netconn_onTeamAdd(flib_netconn *conn, void (*callback)(void *context, const flib_team *team), void *context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   588
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   589
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   590
     * A team was removed from the room. The person who removed the team will not receive this
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   591
     * callback.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   592
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   593
    void flib_netconn_onTeamDelete(flib_netconn *conn, void (*callback)(void *context, const char *teamname), void *context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   594
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   595
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   596
     * The number of hogs in a team has been changed by the room chief. If you are the chief and
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   597
     * change the number of hogs yourself, you will not receive this callback.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   598
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   599
    void flib_netconn_onHogCountChanged(flib_netconn *conn, void (*callback)(void *context, const char *teamName, int hogs), void *context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   600
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   601
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   602
     * The color of a team has been set or changed. The client who set or changed the color will
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   603
     * not receive this callback.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   604
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   605
     * Normally, only the chief can change the color of a team. However, this message is also
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   606
     * generated when a team is added, so you can receive it even as chief.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   607
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   608
    void flib_netconn_onTeamColorChanged(flib_netconn *conn, void (*callback)(void *context, const char *teamName, int colorIndex), void *context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   609
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   610
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   611
     * The room chief has changed the game scheme (or you just joined a room).
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   612
     * You will not receive this callback if you changed the scheme yourself.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   613
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   614
    void flib_netconn_onSchemeChanged(flib_netconn *conn, void (*callback)(void *context, const flib_scheme *scheme), void *context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   615
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   616
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   617
     * The room chief has changed the map (or you just joined a room). Only non-chiefs receive these
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   618
     * messages.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   619
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   620
     * To reduce the number of callback functions, the netconn keeps track of the current map
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   621
     * settings and always passes the entire current map config, but informs the callee about what
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   622
     * has changed (see the NETCONN_MAPCHANGE_ constants).
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   623
     *
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   624
     * Caution: Due to the way the protocol works, the map might not be complete at this point if it
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   625
     * is a hand-drawn map, because the "full" map config does not include the drawn map data.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   626
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   627
    void flib_netconn_onMapChanged(flib_netconn *conn, void (*callback)(void *context, const flib_map *map, int changetype), void *context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   628
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   629
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   630
     * The room chief has changed the game style (or you just joined a room). If you are the chief
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   631
     * and change the style yourself, you will not receive this callback.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   632
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   633
    void flib_netconn_onScriptChanged(flib_netconn *conn, void (*callback)(void *context, const char *script), void *context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   634
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   635
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   636
     * The room chief has changed the weaponset (or you just joined a room). If you are the chief
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   637
     * and change the weaponset yourself, you will not receive this callback.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   638
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   639
    void flib_netconn_onWeaponsetChanged(flib_netconn *conn, void (*callback)(void *context, const flib_weaponset *weaponset), void *context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   640
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   641
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   642
     * The game is starting. Fire up the engine and join in!
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   643
     * You can let the netconn generate the right game setup using flib_netconn_create_gamesetup
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   644
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   645
    void flib_netconn_onRunGame(flib_netconn *conn, void (*callback)(void *context), void *context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   646
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   647
    /**
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   648
     * You are in a room, a game is in progress, and the server is sending you the new input for the
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   649
     * engine to keep up to date with the current happenings. Pass it on to the engine using
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   650
     * flib_gameconn_send_enginemsg.
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   651
     */
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   652
    void flib_netconn_onEngineMessage(flib_netconn *conn, void (*callback)(void *context, const uint8_t *message, size_t size), void *context);
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   653
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
   654
#endif