aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/he/moonbase/net_main.h
blob: 6a3ac94eab6d4d51674a9793d5caf15502ed68af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 */

#ifndef SCUMM_HE_MOONBASE_NET_MAIN_H
#define SCUMM_HE_MOONBASE_NET_MAIN_H

#include "backends/networking/curl/postrequest.h"

namespace Scumm {

class ScummEngine_v100he;

class Net {
public:
	Net(ScummEngine_v100he *vm);
	~Net();

	int hostGame(char *sessionName, char *userName);
	int joinGame(char *IP, char *userName);
	int addUser(char *shortName, char *longName);
	int removeUser();
	int whoSentThis();
	int whoAmI();
	int createSession(char *name);
	int joinSession(int sessionIndex);
	int endSession();
	void disableSessionJoining();
	void enableSessionJoining();
	void setBotsCount(int botsCount);
	int32 setProviderByName(int32 parameter1, int32 parameter2);
	void setFakeLatency(int time);
	bool destroyPlayer(int32 playerDPID);
	int32 startQuerySessions();
	int32 updateQuerySessions();
	void stopQuerySessions();
	int querySessions();
	int queryProviders();
	int setProvider(int providerIndex);
	int closeProvider();
	bool initAll();
	bool initProvider();
	bool initSession();
	bool initUser();
	void remoteStartScript(int typeOfSend, int sendTypeParam, int priority, int argsCount, int32 *args);
	int remoteSendData(int typeOfSend, int sendTypeParam, int type, Common::String data, int defaultRes = 0, bool wait = false, int callid = 0);
	void remoteSendArray(int typeOfSend, int sendTypeParam, int priority, int arrayIndex);
	int remoteStartScriptFunction(int typeOfSend, int sendTypeParam, int priority, int defaultReturnValue, int argsCount, int32 *args);
	void doNetworkOnceAFrame(int msecs);

private:
	bool remoteReceiveData();

	void createSessionCallback(Common::JSONValue *response);
	void createSessionErrorCallback(Networking::ErrorResponse error);

	void startQuerySessionsCallback(Common::JSONValue *response);
	void startQuerySessionsErrorCallback(Networking::ErrorResponse error);

	void addUserCallback(Common::JSONValue *response);
	void addUserErrorCallback(Networking::ErrorResponse error);

	void disableSessionJoiningCallback(Common::JSONValue *response);
	void disableSessionJoiningErrorCallback(Networking::ErrorResponse error);

	void endSessionCallback(Common::JSONValue *response);
	void endSessionErrorCallback(Networking::ErrorResponse error);

	void destroyPlayerCallback(Common::JSONValue *response);
	void destroyPlayerErrorCallback(Networking::ErrorResponse error);

	void remoteSendDataCallback(Common::JSONValue *response);
	void remoteSendDataErrorCallback(Networking::ErrorResponse error);

	void remoteReceiveDataCallback(Common::JSONValue *response);
	void remoteReceiveDataErrorCallback(Networking::ErrorResponse error);

public:
	//getters
	bool getHostName(char *hostname, int length);
	bool getIPfromName(char *ip, int ipLength, char *nameBuffer);
	void getSessionName(int sessionNumber, char *buffer, int length);
	int getSessionPlayerCount(int sessionNumber);
	void getProviderName(int providerIndex, char *buffer, int length);

private:
	//mostly getters

public:
	//fields
	int _latencyTime; // ms
	bool _fakeLatency;

	ScummEngine_v100he *_vm;

	byte *_packbuffer;
	int _packetsize;
	byte *_tmpbuffer;

	int _myUserId;
	int _myPlayerKey;

	int _lastResult;

	int _sessionid;

	bool _sessionsBeingQueried;

	Common::JSONValue *_sessions;
	Common::JSONValue *_packetdata;

	Common::String _serverprefix;
};

} // End of namespace Scumm

#endif