network_client.c
author bjarni
Wed, 26 Jan 2005 11:23:54 +0000
changeset 1177 6adbf59f59a3
parent 1026 5b2681cad645
child 1299 0a6510cc889b
permissions -rw-r--r--
(svn r1679) Fix: dropdown menus now returns the index of the string that was clicked even if a previous item is hidden
This bug was not triggered by the current code, but it's easier to code new features if you do not have to think about such limitations
like you can't hide an item in the middle of the list ;)
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     1
#include "stdafx.h"
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     2
#include "network_data.h"
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     3
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     4
#ifdef ENABLE_NETWORK
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     5
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     6
#include "table/strings.h"
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     7
#include "network_client.h"
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     8
#include "network_gamelist.h"
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
     9
#include "command.h"
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    10
#include "gfx.h"
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    11
#include "window.h"
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    12
#include "settings.h"
1026
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
    13
#include "console.h"
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    14
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    15
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    16
// This file handles all the client-commands
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    17
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    18
716
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 684
diff changeset
    19
extern const char _openttd_revision[];
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 684
diff changeset
    20
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    21
// So we don't make too much typos ;)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    22
#define MY_CLIENT DEREF_CLIENT(0)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    23
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    24
static uint32 last_ack_frame;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    25
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
    26
void NetworkRecvPatchSettings(NetworkClientState *cs, Packet *p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    27
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    28
// **********
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    29
// Sending functions
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    30
//   DEF_CLIENT_SEND_COMMAND has no parameters
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    31
// **********
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    32
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    33
DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_COMPANY_INFO)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    34
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    35
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    36
	// Packet: CLIENT_COMPANY_INFO
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    37
	// Function: Request company-info (in detail)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    38
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    39
	//    <none>
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    40
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    41
	Packet *p;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    42
	_network_join_status = NETWORK_JOIN_STATUS_GETTING_COMPANY_INFO;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    43
	InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    44
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    45
	p = NetworkSend_Init(PACKET_CLIENT_COMPANY_INFO);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    46
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    47
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    48
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    49
DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_JOIN)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    50
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    51
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    52
	// Packet: CLIENT_JOIN
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    53
	// Function: Try to join the server
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    54
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    55
	//    String: OpenTTD Revision (norev000 if no revision)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    56
	//    String: Player Name (max NETWORK_NAME_LENGTH)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    57
	//    uint8:  Play as Player id (1..MAX_PLAYERS)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    58
	//    uint8:  Language ID
602
9bbe42a9e3ed (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents: 571
diff changeset
    59
	//    String: Unique id to find the player back in server-listing
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    60
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    61
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    62
	Packet *p;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    63
	_network_join_status = NETWORK_JOIN_STATUS_AUTHORIZING;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    64
	InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    65
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    66
	p = NetworkSend_Init(PACKET_CLIENT_JOIN);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    67
	NetworkSend_string(p, _openttd_revision);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    68
	NetworkSend_string(p, _network_player_name); // Player name
662
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
    69
	NetworkSend_uint8(p, _network_playas); // PlayAs
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    70
	NetworkSend_uint8(p, NETLANG_ANY); // Language
602
9bbe42a9e3ed (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents: 571
diff changeset
    71
	NetworkSend_string(p, _network_unique_id);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    72
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    73
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    74
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    75
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_PASSWORD)(NetworkPasswordType type, const char *password)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    76
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    77
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    78
	// Packet: CLIENT_PASSWORD
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    79
	// Function: Send a password to the server to authorize
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    80
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    81
	//    uint8:  NetworkPasswordType
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    82
	//    String: Password
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    83
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    84
	Packet *p = NetworkSend_Init(PACKET_CLIENT_PASSWORD);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    85
	NetworkSend_uint8(p, type);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    86
	NetworkSend_string(p, password);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    87
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    88
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    89
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    90
DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_GETMAP)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    91
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    92
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    93
	// Packet: CLIENT_GETMAP
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    94
	// Function: Request the map from the server
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    95
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    96
	//    <none>
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    97
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    98
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
    99
	Packet *p = NetworkSend_Init(PACKET_CLIENT_GETMAP);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   100
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   101
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   102
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   103
DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_MAP_OK)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   104
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   105
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   106
	// Packet: CLIENT_MAP_OK
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   107
	// Function: Tell the server that we are done receiving/loading the map
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   108
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   109
	//    <none>
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   110
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   111
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   112
	Packet *p = NetworkSend_Init(PACKET_CLIENT_MAP_OK);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   113
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   114
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   115
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   116
DEF_CLIENT_SEND_COMMAND(PACKET_CLIENT_ACK)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   117
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   118
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   119
	// Packet: CLIENT_ACK
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   120
	// Function: Tell the server we are done with this frame
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   121
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   122
	//    uint32: current FrameCounter of the client
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   123
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   124
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   125
	Packet *p = NetworkSend_Init(PACKET_CLIENT_ACK);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   126
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   127
	NetworkSend_uint32(p, _frame_counter);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   128
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   129
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   130
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   131
// Send a command packet to the server
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   132
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_COMMAND)(CommandPacket *cp)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   133
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   134
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   135
	// Packet: CLIENT_COMMAND
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   136
	// Function: Send a DoCommand to the Server
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   137
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   138
	//    uint8:  PlayerID (0..MAX_PLAYERS-1)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   139
	//    uint32: CommandID (see command.h)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   140
	//    uint32: P1 (free variables used in DoCommand)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   141
	//    uint32: P2
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   142
	//    uint32: Tile
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   143
	//    uint32: decode_params
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   144
	//      10 times the last one (lengthof(cp->dp))
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   145
	//    uint8:  CallBackID (see callback_table.c)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   146
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   147
959
b031d88c76f3 (svn r1451) Fix some of the signed/unsigned comparison warnings
tron
parents: 903
diff changeset
   148
	uint i;
571
7c0afe9e6a73 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
truelight
parents: 543
diff changeset
   149
	char *dparam_char;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   150
	Packet *p = NetworkSend_Init(PACKET_CLIENT_COMMAND);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   151
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   152
	NetworkSend_uint8(p, cp->player);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   153
	NetworkSend_uint32(p, cp->cmd);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   154
	NetworkSend_uint32(p, cp->p1);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   155
	NetworkSend_uint32(p, cp->p2);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   156
	NetworkSend_uint32(p, (uint32)cp->tile);
571
7c0afe9e6a73 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
truelight
parents: 543
diff changeset
   157
	/* We are going to send them byte by byte, because dparam is misused
7c0afe9e6a73 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
truelight
parents: 543
diff changeset
   158
	    for chars (if it is used), and else we have a BigEndian / LittleEndian
7c0afe9e6a73 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
truelight
parents: 543
diff changeset
   159
	    problem.. we should fix the misuse of dparam... -- TrueLight */
7c0afe9e6a73 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
truelight
parents: 543
diff changeset
   160
	dparam_char = (char *)&cp->dp[0];
7c0afe9e6a73 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
truelight
parents: 543
diff changeset
   161
	for (i = 0; i < lengthof(cp->dp) * 4; i++) {
7c0afe9e6a73 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
truelight
parents: 543
diff changeset
   162
		NetworkSend_uint8(p, *dparam_char);
7c0afe9e6a73 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
truelight
parents: 543
diff changeset
   163
		dparam_char++;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   164
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   165
	NetworkSend_uint8(p, cp->callback);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   166
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   167
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   168
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   169
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   170
// Send a chat-packet over the network
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   171
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_CHAT)(NetworkAction action, DestType desttype, int dest, const char *msg)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   172
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   173
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   174
	// Packet: CLIENT_CHAT
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   175
	// Function: Send a chat-packet to the serve
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   176
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   177
	//    uint8:  ActionID (see network_data.h, NetworkAction)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   178
	//    uint8:  Destination Type (see network_data.h, DestType);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   179
	//    uint8:  Destination Player (1..MAX_PLAYERS)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   180
	//    String: Message (max MAX_TEXT_MSG_LEN)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   181
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   182
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   183
	Packet *p = NetworkSend_Init(PACKET_CLIENT_CHAT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   184
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   185
	NetworkSend_uint8(p, action);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   186
	NetworkSend_uint8(p, desttype);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   187
	NetworkSend_uint8(p, dest);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   188
	NetworkSend_string(p, msg);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   189
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   190
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   191
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   192
// Send an error-packet over the network
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   193
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_ERROR)(NetworkErrorCode errorno)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   194
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   195
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   196
	// Packet: CLIENT_ERROR
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   197
	// Function: The client made an error and is quiting the game
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   198
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   199
	//    uint8:  ErrorID (see network_data.h, NetworkErrorCode)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   200
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   201
	Packet *p = NetworkSend_Init(PACKET_CLIENT_ERROR);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   202
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   203
	NetworkSend_uint8(p, errorno);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   204
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   205
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   206
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   207
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_SET_PASSWORD)(const char *password)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   208
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   209
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   210
	// Packet: PACKET_CLIENT_SET_PASSWORD
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   211
	// Function: Set the password for the clients current company
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   212
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   213
	//    String: Password
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   214
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   215
	Packet *p = NetworkSend_Init(PACKET_CLIENT_SET_PASSWORD);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   216
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   217
	NetworkSend_string(p, password);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   218
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   219
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   220
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   221
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_SET_NAME)(const char *name)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   222
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   223
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   224
	// Packet: PACKET_CLIENT_SET_NAME
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   225
	// Function: Gives the player a new name
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   226
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   227
	//    String: Name
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   228
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   229
	Packet *p = NetworkSend_Init(PACKET_CLIENT_SET_NAME);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   230
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   231
	NetworkSend_string(p, name);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   232
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   233
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   234
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   235
// Send an quit-packet over the network
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   236
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_QUIT)(const char *leavemsg)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   237
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   238
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   239
	// Packet: CLIENT_QUIT
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   240
	// Function: The client is quiting the game
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   241
	// Data:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   242
	//    String: leave-message
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   243
	//
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   244
	Packet *p = NetworkSend_Init(PACKET_CLIENT_QUIT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   245
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   246
	NetworkSend_string(p, leavemsg);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   247
	NetworkSend_Packet(p, MY_CLIENT);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   248
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   249
1026
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   250
DEF_CLIENT_SEND_COMMAND_PARAM(PACKET_CLIENT_RCON)(const char *pass, const char *command)
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   251
{
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   252
	Packet *p = NetworkSend_Init(PACKET_CLIENT_RCON);
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   253
	NetworkSend_string(p, pass);
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   254
	NetworkSend_string(p, command);
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   255
	NetworkSend_Packet(p, MY_CLIENT);
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   256
}
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   257
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   258
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   259
// **********
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   260
// Receiving functions
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   261
//   DEF_CLIENT_RECEIVE_COMMAND has parameter: Packet *p
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   262
// **********
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   263
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   264
extern bool SafeSaveOrLoad(const char *filename, int mode, int newgm);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   265
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   266
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_FULL)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   267
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   268
	// We try to join a server which is full
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   269
	_switch_mode_errorstr = STR_NETWORK_ERR_SERVER_FULL;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   270
	DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   271
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   272
	return NETWORK_RECV_STATUS_SERVER_FULL;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   273
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   274
841
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   275
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_BANNED)
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   276
{
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   277
	// We try to join a server where we are banned
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   278
	_switch_mode_errorstr = STR_NETWORK_ERR_SERVER_BANNED;
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   279
	DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   280
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   281
	return NETWORK_RECV_STATUS_SERVER_BANNED;
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   282
}
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   283
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   284
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_COMPANY_INFO)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   285
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   286
	byte company_info_version;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   287
	int i;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   288
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   289
	company_info_version = NetworkRecv_uint8(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   290
1013
8080f9db9057 (svn r1513) -Fix: glitch in revision 1510
truelight
parents: 1011
diff changeset
   291
	if (!MY_CLIENT->quited && company_info_version == NETWORK_COMPANY_INFO_VERSION) {
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   292
		byte total;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   293
		byte current;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   294
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   295
		total = NetworkRecv_uint8(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   296
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   297
		// There is no data at all..
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   298
		if (total == 0)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   299
			return NETWORK_RECV_STATUS_CLOSE_QUERY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   300
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   301
		current = NetworkRecv_uint8(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   302
		if (current >= MAX_PLAYERS)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   303
			return NETWORK_RECV_STATUS_CLOSE_QUERY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   304
734
018e549265ed (svn r1186) -Fix: [Network] You can now join a company on a server where a company
truelight
parents: 722
diff changeset
   305
		_network_lobby_company_count++;
018e549265ed (svn r1186) -Fix: [Network] You can now join a company on a server where a company
truelight
parents: 722
diff changeset
   306
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   307
		NetworkRecv_string(MY_CLIENT, p, _network_player_info[current].company_name, sizeof(_network_player_info[current].company_name));
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   308
		_network_player_info[current].inaugurated_year = NetworkRecv_uint8(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   309
		_network_player_info[current].company_value = NetworkRecv_uint64(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   310
		_network_player_info[current].money = NetworkRecv_uint64(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   311
		_network_player_info[current].income = NetworkRecv_uint64(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   312
		_network_player_info[current].performance = NetworkRecv_uint16(MY_CLIENT, p);
1011
2587838541bf (svn r1510) -Add: Improved Network Lobby GUI: (bociusz)
truelight
parents: 959
diff changeset
   313
		_network_player_info[current].use_password = NetworkRecv_uint8(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   314
		for (i = 0; i < NETWORK_VEHICLE_TYPES; i++)
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   315
			_network_player_info[current].num_vehicle[i] = NetworkRecv_uint16(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   316
		for (i = 0; i < NETWORK_STATION_TYPES; i++)
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   317
			_network_player_info[current].num_station[i] = NetworkRecv_uint16(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   318
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   319
		NetworkRecv_string(MY_CLIENT, p, _network_player_info[current].players, sizeof(_network_player_info[current].players));
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   320
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   321
		InvalidateWindow(WC_NETWORK_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   322
734
018e549265ed (svn r1186) -Fix: [Network] You can now join a company on a server where a company
truelight
parents: 722
diff changeset
   323
		return NETWORK_RECV_STATUS_OKAY;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   324
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   325
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   326
	return NETWORK_RECV_STATUS_CLOSE_QUERY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   327
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   328
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   329
// This packet contains info about the client (playas and name)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   330
//  as client we save this in NetworkClientInfo, linked via 'index'
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   331
//  which is always an unique number on a server.
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   332
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_CLIENT_INFO)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   333
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   334
	NetworkClientInfo *ci;
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   335
	uint16 index = NetworkRecv_uint16(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   336
	byte playas = NetworkRecv_uint8(MY_CLIENT, p);
662
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   337
	char name[NETWORK_NAME_LENGTH];
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   338
	char unique_id[NETWORK_NAME_LENGTH];
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   339
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   340
	NetworkRecv_string(MY_CLIENT, p, name, sizeof(name));
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   341
	NetworkRecv_string(MY_CLIENT, p, unique_id, sizeof(unique_id));
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   342
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   343
	if (MY_CLIENT->quited)
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   344
		return NETWORK_RECV_STATUS_CONN_LOST;
662
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   345
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   346
	/* Do we receive a change of data? Most likely we changed playas */
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   347
	if (index == _network_own_client_index)
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   348
		_network_playas = playas;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   349
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   350
	ci = NetworkFindClientInfoFromIndex(index);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   351
	if (ci != NULL) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   352
		if (playas == ci->client_playas && strcmp(name, ci->client_name) != 0) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   353
			// Client name changed, display the change
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   354
			NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, 1, false, ci->client_name, name);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   355
		} else if (playas != ci->client_playas) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   356
			// The player changed from client-player..
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   357
			// Do not display that for now
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   358
		}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   359
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   360
		ci->client_playas = playas;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   361
		ttd_strlcpy(ci->client_name, name, sizeof(ci->client_name));
662
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   362
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   363
		InvalidateWindow(WC_CLIENT_LIST, 0);
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   364
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   365
		return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   366
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   367
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   368
	// We don't have this index yet, find an empty index, and put the data there
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   369
	ci = NetworkFindClientInfoFromIndex(NETWORK_EMPTY_INDEX);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   370
	if (ci != NULL) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   371
		ci->client_index = index;
662
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   372
		ci->client_playas = playas;
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   373
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   374
		ttd_strlcpy(ci->client_name, name, sizeof(ci->client_name));
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   375
		ttd_strlcpy(ci->unique_id, unique_id, sizeof(ci->unique_id));
029d67bd54e6 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
truelight
parents: 659
diff changeset
   376
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   377
		InvalidateWindow(WC_CLIENT_LIST, 0);
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   378
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   379
		return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   380
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   381
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   382
	// Here the program should never ever come.....
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   383
	return NETWORK_RECV_STATUS_MALFORMED_PACKET;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   384
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   385
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   386
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_ERROR)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   387
{
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   388
	NetworkErrorCode error = NetworkRecv_uint8(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   389
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   390
	if (error == NETWORK_ERROR_NOT_AUTHORIZED || error == NETWORK_ERROR_NOT_EXPECTED ||
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   391
			error == NETWORK_ERROR_PLAYER_MISMATCH) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   392
		// We made an error in the protocol, and our connection is closed.... :(
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   393
		_switch_mode_errorstr = STR_NETWORK_ERR_SERVER_ERROR;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   394
	} else if (error == NETWORK_ERROR_WRONG_REVISION) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   395
		// Wrong revision :(
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   396
		_switch_mode_errorstr = STR_NETWORK_ERR_WRONG_REVISION;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   397
	} else if (error == NETWORK_ERROR_WRONG_PASSWORD) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   398
		// Wrong password
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   399
		_switch_mode_errorstr = STR_NETWORK_ERR_WRONG_PASSWORD;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   400
	} else if (error == NETWORK_ERROR_KICKED) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   401
		_switch_mode_errorstr = STR_NETWORK_ERR_KICKED;
748
b48388344610 (svn r1204) -Add: [Network] Added some cheaters-protection (money-cheat mostly)
truelight
parents: 734
diff changeset
   402
	} else if (error == NETWORK_ERROR_CHEATER) {
b48388344610 (svn r1204) -Add: [Network] Added some cheaters-protection (money-cheat mostly)
truelight
parents: 734
diff changeset
   403
		_switch_mode_errorstr = STR_NETWORK_ERR_CHEATER;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   404
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   405
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   406
	DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   407
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   408
	return NETWORK_RECV_STATUS_SERVER_ERROR;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   409
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   410
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   411
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_NEED_PASSWORD)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   412
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   413
	NetworkPasswordType type;
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   414
	type = NetworkRecv_uint8(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   415
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   416
	if (type == NETWORK_GAME_PASSWORD) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   417
		ShowNetworkNeedGamePassword();
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   418
		return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   419
	} else if (type == NETWORK_COMPANY_PASSWORD) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   420
		ShowNetworkNeedCompanyPassword();
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   421
		return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   422
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   423
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   424
	return NETWORK_RECV_STATUS_MALFORMED_PACKET;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   425
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   426
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   427
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_WELCOME)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   428
{
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   429
	_network_own_client_index = NetworkRecv_uint16(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   430
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   431
	// Start receiving the map
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   432
	SEND_COMMAND(PACKET_CLIENT_GETMAP)();
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   433
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   434
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   435
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   436
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_WAIT)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   437
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   438
	_network_join_status = NETWORK_JOIN_STATUS_WAITING;
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   439
	_network_join_waiting = NetworkRecv_uint8(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   440
	InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   441
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   442
	// We are put on hold for receiving the map.. we need GUI for this ;)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   443
	DEBUG(net, 1)("[NET] The server is currently busy sending the map to someone else.. please hold..." );
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   444
	DEBUG(net, 1)("[NET]  There are %d clients in front of you", _network_join_waiting);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   445
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   446
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   447
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   448
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   449
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_MAP)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   450
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   451
	static char filename[256];
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   452
	static FILE *file_pointer;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   453
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   454
	byte maptype;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   455
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   456
	maptype = NetworkRecv_uint8(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   457
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   458
	if (MY_CLIENT->quited)
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   459
		return NETWORK_RECV_STATUS_CONN_LOST;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   460
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   461
	// First packet, init some stuff
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   462
	if (maptype == MAP_PACKET_START) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   463
		// The name for the temp-map
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   464
		sprintf(filename, "%s%snetwork_client.tmp",  _path.autosave_dir, PATHSEP);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   465
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   466
		file_pointer = fopen(filename, "wb");
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   467
		if (file_pointer == NULL) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   468
			_switch_mode_errorstr = STR_NETWORK_ERR_SAVEGAMEERROR;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   469
			return NETWORK_RECV_STATUS_SAVEGAME;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   470
		}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   471
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   472
		_frame_counter = _frame_counter_server = _frame_counter_max = NetworkRecv_uint32(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   473
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   474
		_network_join_status = NETWORK_JOIN_STATUS_DOWNLOADING;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   475
		_network_join_kbytes = 0;
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   476
		_network_join_kbytes_total = NetworkRecv_uint32(MY_CLIENT, p) / 1024;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   477
		InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   478
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   479
		// The first packet does not contain any more data
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   480
		return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   481
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   482
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   483
	if (maptype == MAP_PACKET_NORMAL) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   484
		// We are still receiving data, put it to the file
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   485
		fwrite(p->buffer + p->pos, 1, p->size - p->pos, file_pointer);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   486
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   487
		_network_join_kbytes = ftell(file_pointer) / 1024;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   488
		InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   489
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   490
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   491
	if (maptype == MAP_PACKET_PATCH) {
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   492
		NetworkRecvPatchSettings(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   493
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   494
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   495
	// Check if this was the last packet
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   496
	if (maptype == MAP_PACKET_END) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   497
		// We also get, very nice, the player_seeds in this packet
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   498
		int i;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   499
		for (i = 0; i < MAX_PLAYERS; i++) {
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   500
			_player_seeds[i][0] = NetworkRecv_uint32(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   501
			_player_seeds[i][1] = NetworkRecv_uint32(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   502
		}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   503
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   504
		fclose(file_pointer);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   505
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   506
		_network_join_status = NETWORK_JOIN_STATUS_PROCESSING;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   507
		InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   508
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   509
		// The map is done downloading, load it
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   510
		// Load the map
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   511
		if (!SafeSaveOrLoad(filename, SL_LOAD, GM_NORMAL)) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   512
			DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   513
			_switch_mode_errorstr = STR_NETWORK_ERR_SAVEGAMEERROR;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   514
			return NETWORK_RECV_STATUS_SAVEGAME;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   515
		}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   516
		_opt_mod_ptr = &_opt;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   517
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   518
		// Say we received the map and loaded it correctly!
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   519
		SEND_COMMAND(PACKET_CLIENT_MAP_OK)();
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   520
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   521
		if (_network_playas == 0 || _network_playas > MAX_PLAYERS ||
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   522
				!DEREF_PLAYER(_network_playas - 1)->is_active) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   523
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   524
			if (_network_playas == OWNER_SPECTATOR) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   525
				// The client wants to be a spectator..
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   526
				_local_player = OWNER_SPECTATOR;
670
7c58dc46609c (svn r1108) -Fix: [Network] Fixed problem around slow clients:
truelight
parents: 662
diff changeset
   527
				DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   528
			} else {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   529
				// send a command to make a new player
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   530
				_local_player = 0;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   531
				NetworkSend_Command(0, 0, 0, CMD_PLAYER_CTRL, NULL);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   532
				_local_player = OWNER_SPECTATOR;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   533
			}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   534
		} else {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   535
			// take control over an existing company
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   536
			_local_player = _network_playas - 1;
684
425b1741fd45 (svn r1125) -Fix: [Network] You can now safely join a company again
truelight
parents: 670
diff changeset
   537
			DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   538
		}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   539
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   540
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   541
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   542
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   544
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_FRAME)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   545
{
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   546
	_frame_counter_server = NetworkRecv_uint32(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   547
	_frame_counter_max = NetworkRecv_uint32(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   548
#ifdef ENABLE_NETWORK_SYNC_EVERY_FRAME
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   549
	// Test if the server supports this option
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   550
	//  and if we are at the frame the server is
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   551
	if (p->pos < p->size) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   552
		_sync_frame = _frame_counter_server;
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   553
		_sync_seed_1 = NetworkRecv_uint32(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   554
#ifdef NETWORK_SEND_DOUBLE_SEED
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   555
		_sync_seed_2 = NetworkRecv_uint32(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   556
#endif
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   557
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   558
#endif
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   559
	DEBUG(net, 7)("[NET] Received FRAME %d",_frame_counter_server);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   560
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   561
	// Let the server know that we received this frame correctly
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   562
	//  We do this only once per day, to save some bandwidth ;)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   563
	if (!_network_first_time && last_ack_frame < _frame_counter) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   564
		last_ack_frame = _frame_counter + DAY_TICKS;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   565
		DEBUG(net,6)("[NET] Sent ACK at %d", _frame_counter);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   566
		SEND_COMMAND(PACKET_CLIENT_ACK)();
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   567
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   568
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   569
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   570
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   571
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   572
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_SYNC)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   573
{
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   574
	_sync_frame = NetworkRecv_uint32(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   575
	_sync_seed_1 = NetworkRecv_uint32(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   576
#ifdef NETWORK_SEND_DOUBLE_SEED
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   577
	_sync_seed_2 = NetworkRecv_uint32(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   578
#endif
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   579
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   580
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   581
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   582
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   583
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_COMMAND)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   584
{
959
b031d88c76f3 (svn r1451) Fix some of the signed/unsigned comparison warnings
tron
parents: 903
diff changeset
   585
	uint i;
571
7c0afe9e6a73 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
truelight
parents: 543
diff changeset
   586
	char *dparam_char;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   587
	CommandPacket *cp = malloc(sizeof(CommandPacket));
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   588
	cp->player = NetworkRecv_uint8(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   589
	cp->cmd = NetworkRecv_uint32(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   590
	cp->p1 = NetworkRecv_uint32(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   591
	cp->p2 = NetworkRecv_uint32(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   592
	cp->tile = NetworkRecv_uint32(MY_CLIENT, p);
571
7c0afe9e6a73 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
truelight
parents: 543
diff changeset
   593
	/* We are going to send them byte by byte, because dparam is misused
7c0afe9e6a73 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
truelight
parents: 543
diff changeset
   594
	    for chars (if it is used), and else we have a BigEndian / LittleEndian
7c0afe9e6a73 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
truelight
parents: 543
diff changeset
   595
	    problem.. we should fix the misuse of dparam... -- TrueLight */
7c0afe9e6a73 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
truelight
parents: 543
diff changeset
   596
	dparam_char = (char *)&cp->dp[0];
7c0afe9e6a73 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
truelight
parents: 543
diff changeset
   597
	for (i = 0; i < lengthof(cp->dp) * 4; i++) {
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   598
		*dparam_char = NetworkRecv_uint8(MY_CLIENT, p);
571
7c0afe9e6a73 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
truelight
parents: 543
diff changeset
   599
		dparam_char++;
7c0afe9e6a73 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
truelight
parents: 543
diff changeset
   600
	}
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   601
	cp->callback = NetworkRecv_uint8(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   602
	cp->frame = NetworkRecv_uint32(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   603
	cp->next = NULL;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   604
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   605
	// The server did send us this command..
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   606
	//  queue it in our own queue, so we can handle it in the upcoming frame!
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   607
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   608
	if (_local_command_queue == NULL) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   609
		_local_command_queue = cp;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   610
	} else {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   611
		// Find last packet
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   612
		CommandPacket *c = _local_command_queue;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   613
		while (c->next != NULL) c = c->next;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   614
		c->next = cp;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   615
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   616
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   617
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   618
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   619
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   620
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_CHAT)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   621
{
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   622
	NetworkAction action = NetworkRecv_uint8(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   623
	char msg[MAX_TEXT_MSG_LEN];
774
258c11431acb (svn r1240) -Fix: OpenTTD once again compiles if ENABLE_NETWORK is disabled.
darkvater
parents: 748
diff changeset
   624
	NetworkClientInfo *ci = NULL, *ci_to;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   625
	uint16 index;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   626
	char name[NETWORK_NAME_LENGTH];
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   627
	bool self_send;
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   628
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   629
	index = NetworkRecv_uint16(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   630
	self_send = NetworkRecv_uint8(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   631
	NetworkRecv_string(MY_CLIENT, p, msg, MAX_TEXT_MSG_LEN);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   632
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   633
	ci_to = NetworkFindClientInfoFromIndex(index);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   634
	if (ci_to == NULL) return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   635
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   636
	/* Do we display the action locally? */
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   637
	if (self_send) {
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   638
		switch (action) {
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   639
			case NETWORK_ACTION_CHAT_CLIENT:
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   640
				/* For speak to client we need the client-name */
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   641
				snprintf(name, sizeof(name), "%s", ci_to->client_name);
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   642
				ci = NetworkFindClientInfoFromIndex(_network_own_client_index);
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   643
				break;
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   644
			case NETWORK_ACTION_CHAT_PLAYER:
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   645
			case NETWORK_ACTION_GIVE_MONEY:
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   646
				/* For speak to player or give money, we need the player-name */
779
1abefd084ffb (svn r1246) -Fix: [ 1090099 ] Company-messages did crash the game, because
truelight
parents: 774
diff changeset
   647
				if (ci_to->client_playas > MAX_PLAYERS)
1abefd084ffb (svn r1246) -Fix: [ 1090099 ] Company-messages did crash the game, because
truelight
parents: 774
diff changeset
   648
					return NETWORK_RECV_STATUS_OKAY; // This should never happen
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   649
				GetString(name, DEREF_PLAYER(ci_to->client_playas-1)->name_1);
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   650
				ci = NetworkFindClientInfoFromIndex(_network_own_client_index);
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   651
				break;
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   652
			default:
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   653
				/* This should never happen */
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   654
				NOT_REACHED();
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   655
				break;
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   656
		}
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   657
	} else {
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   658
		/* Display message from somebody else */
602
9bbe42a9e3ed (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
truelight
parents: 571
diff changeset
   659
		snprintf(name, sizeof(name), "%s", ci_to->client_name);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   660
		ci = ci_to;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   661
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   662
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   663
	if (ci != NULL)
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   664
		NetworkTextMessage(action, GetDrawStringPlayerColor(ci->client_playas-1), self_send, name, "%s", msg);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   665
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   666
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   667
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   668
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_ERROR_QUIT)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   669
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   670
	int errorno;
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   671
	char str[100];
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   672
	uint16 index;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   673
	NetworkClientInfo *ci;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   674
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   675
	index = NetworkRecv_uint16(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   676
	errorno = NetworkRecv_uint8(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   677
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   678
	GetString(str, STR_NETWORK_ERR_CLIENT_GENERAL + errorno);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   679
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   680
	ci = NetworkFindClientInfoFromIndex(index);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   681
	if (ci != NULL) {
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   682
		NetworkTextMessage(NETWORK_ACTION_LEAVE, 1, false, ci->client_name, str);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   683
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   684
		// The client is gone, give the NetworkClientInfo free
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   685
		ci->client_index = NETWORK_EMPTY_INDEX;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   686
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   687
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   688
	InvalidateWindow(WC_CLIENT_LIST, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   689
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   690
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   691
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   692
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   693
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_QUIT)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   694
{
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   695
	char str[100];
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   696
	uint16 index;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   697
	NetworkClientInfo *ci;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   698
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   699
	index = NetworkRecv_uint16(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   700
	NetworkRecv_string(MY_CLIENT, p, str, 100);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   701
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   702
	ci = NetworkFindClientInfoFromIndex(index);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   703
	if (ci != NULL) {
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   704
		NetworkTextMessage(NETWORK_ACTION_LEAVE, 1, false, ci->client_name, str);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   705
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   706
		// The client is gone, give the NetworkClientInfo free
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   707
		ci->client_index = NETWORK_EMPTY_INDEX;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   708
	} else {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   709
		DEBUG(net, 0)("[NET] Error - unknown client (%d) is leaving the game", index);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   710
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   711
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   712
	InvalidateWindow(WC_CLIENT_LIST, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   713
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   714
	// If we come here it means we could not locate the client.. strange :s
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   715
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   716
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   717
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   718
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_JOIN)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   719
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   720
	uint16 index;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   721
	NetworkClientInfo *ci;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   722
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   723
	index = NetworkRecv_uint16(MY_CLIENT, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   724
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   725
	ci = NetworkFindClientInfoFromIndex(index);
722
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   726
	if (ci != NULL)
d0b031be5232 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings)
truelight
parents: 717
diff changeset
   727
		NetworkTextMessage(NETWORK_ACTION_JOIN, 1, false, ci->client_name, "");
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   728
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   729
	InvalidateWindow(WC_CLIENT_LIST, 0);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   730
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   731
	return NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   732
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   733
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   734
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_SHUTDOWN)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   735
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   736
	_switch_mode_errorstr = STR_NETWORK_SERVER_SHUTDOWN;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   737
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   738
	return NETWORK_RECV_STATUS_SERVER_ERROR;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   739
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   740
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   741
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_NEWGAME)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   742
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   743
	// To trottle the reconnects a bit, every clients waits
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   744
	//  his _local_player value before reconnecting
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   745
	// OWNER_SPECTATOR is currently 255, so to avoid long wait periods
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   746
	//  set the max to 10.
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   747
	_network_reconnect = min(_local_player + 1, 10);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   748
	_switch_mode_errorstr = STR_NETWORK_SERVER_REBOOT;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   749
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   750
	return NETWORK_RECV_STATUS_SERVER_ERROR;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   751
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   752
1026
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   753
DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_RCON)
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   754
{
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   755
	char rcon_out[NETWORK_RCONCOMMAND_LENGTH];
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   756
	uint16 color_code;
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   757
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   758
	color_code = NetworkRecv_uint16(MY_CLIENT, p);
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   759
	NetworkRecv_string(MY_CLIENT, p, rcon_out, sizeof(rcon_out));
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   760
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   761
	IConsolePrint(color_code, rcon_out);
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   762
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   763
	return NETWORK_RECV_STATUS_OKAY;
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   764
}
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   765
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   766
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   767
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   768
// The layout for the receive-functions by the client
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   769
typedef NetworkRecvStatus NetworkClientPacket(Packet *p);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   770
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   771
// This array matches PacketType. At an incoming
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   772
//  packet it is matches against this array
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   773
//  and that way the right function to handle that
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   774
//  packet is found.
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   775
static NetworkClientPacket* const _network_client_packet[] = {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   776
	RECEIVE_COMMAND(PACKET_SERVER_FULL),
841
8f0a68c6f43b (svn r1322) -Add: banning system (mostly tnx to guru3)
truelight
parents: 779
diff changeset
   777
	RECEIVE_COMMAND(PACKET_SERVER_BANNED),
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   778
	NULL, /*PACKET_CLIENT_JOIN,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   779
	RECEIVE_COMMAND(PACKET_SERVER_ERROR),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   780
	NULL, /*PACKET_CLIENT_COMPANY_INFO,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   781
	RECEIVE_COMMAND(PACKET_SERVER_COMPANY_INFO),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   782
	RECEIVE_COMMAND(PACKET_SERVER_CLIENT_INFO),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   783
	RECEIVE_COMMAND(PACKET_SERVER_NEED_PASSWORD),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   784
	NULL, /*PACKET_CLIENT_PASSWORD,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   785
	RECEIVE_COMMAND(PACKET_SERVER_WELCOME),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   786
	NULL, /*PACKET_CLIENT_GETMAP,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   787
	RECEIVE_COMMAND(PACKET_SERVER_WAIT),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   788
	RECEIVE_COMMAND(PACKET_SERVER_MAP),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   789
	NULL, /*PACKET_CLIENT_MAP_OK,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   790
	RECEIVE_COMMAND(PACKET_SERVER_JOIN),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   791
	RECEIVE_COMMAND(PACKET_SERVER_FRAME),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   792
	RECEIVE_COMMAND(PACKET_SERVER_SYNC),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   793
	NULL, /*PACKET_CLIENT_ACK,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   794
	NULL, /*PACKET_CLIENT_COMMAND,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   795
	RECEIVE_COMMAND(PACKET_SERVER_COMMAND),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   796
	NULL, /*PACKET_CLIENT_CHAT,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   797
	RECEIVE_COMMAND(PACKET_SERVER_CHAT),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   798
	NULL, /*PACKET_CLIENT_SET_PASSWORD,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   799
	NULL, /*PACKET_CLIENT_SET_NAME,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   800
	NULL, /*PACKET_CLIENT_QUIT,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   801
	NULL, /*PACKET_CLIENT_ERROR,*/
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   802
	RECEIVE_COMMAND(PACKET_SERVER_QUIT),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   803
	RECEIVE_COMMAND(PACKET_SERVER_ERROR_QUIT),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   804
	RECEIVE_COMMAND(PACKET_SERVER_SHUTDOWN),
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   805
	RECEIVE_COMMAND(PACKET_SERVER_NEWGAME),
1026
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   806
	RECEIVE_COMMAND(PACKET_SERVER_RCON),
5b2681cad645 (svn r1527) -Add: RCon (Remote Connection). A server can set:
truelight
parents: 1013
diff changeset
   807
	NULL, /*PACKET_CLIENT_RCON,*/
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   808
};
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   809
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   810
// If this fails, check the array above with network_data.h
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   811
assert_compile(lengthof(_network_client_packet) == PACKET_END);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   812
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   813
extern const SettingDesc patch_settings[];
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   814
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   815
// This is a TEMPORARY solution to get the patch-settings
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   816
//  to the client. When the patch-settings are saved in the savegame
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   817
//  this should be removed!!
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   818
void NetworkRecvPatchSettings(NetworkClientState *cs, Packet *p)
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   819
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   820
	const SettingDesc *item;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   821
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   822
	item = patch_settings;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   823
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   824
	while (item->name != NULL) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   825
		switch (item->flags) {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   826
			case SDT_BOOL:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   827
			case SDT_INT8:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   828
			case SDT_UINT8:
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   829
				*(uint8 *)(item->ptr) = NetworkRecv_uint8(cs, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   830
				break;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   831
			case SDT_INT16:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   832
			case SDT_UINT16:
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   833
				*(uint16 *)(item->ptr) = NetworkRecv_uint16(cs, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   834
				break;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   835
			case SDT_INT32:
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   836
			case SDT_UINT32:
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   837
				*(uint32 *)(item->ptr) = NetworkRecv_uint32(cs, p);
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   838
				break;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   839
		}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   840
		item++;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   841
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   842
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   843
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   844
// Is called after a client is connected to the server
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   845
void NetworkClient_Connected(void)
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   846
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   847
	// Set the frame-counter to 0 so nothing happens till we are ready
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   848
	_frame_counter = 0;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   849
	_frame_counter_server = 0;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   850
	last_ack_frame = 0;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   851
	// Request the game-info
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   852
	SEND_COMMAND(PACKET_CLIENT_JOIN)();
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   853
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   854
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   855
// Reads the packets from the socket-stream, if available
716
40a349345f82 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
truelight
parents: 684
diff changeset
   856
NetworkRecvStatus NetworkClient_ReadPackets(NetworkClientState *cs)
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   857
{
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   858
	Packet *p;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   859
	NetworkRecvStatus res = NETWORK_RECV_STATUS_OKAY;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   860
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   861
	while (res == NETWORK_RECV_STATUS_OKAY && (p = NetworkRecv_Packet(cs, &res)) != NULL) {
903
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   862
		byte type = NetworkRecv_uint8(MY_CLIENT, p);
f860c7234167 (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
truelight
parents: 841
diff changeset
   863
		if (type < PACKET_END && _network_client_packet[type] != NULL && !MY_CLIENT->quited) {
543
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   864
			res = _network_client_packet[type](p);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   865
		}	else {
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   866
			res = NETWORK_RECV_STATUS_MALFORMED_PACKET;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   867
			DEBUG(net, 0)("[NET][client] Received invalid packet type %d", type);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   868
		}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   869
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   870
		free(p);
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   871
	}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   872
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   873
	return res;
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   874
}
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   875
e3b43338096b (svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff changeset
   876
#endif /* ENABLE_NETWORK */