summaryrefslogtreecommitdiff
path: root/modules/websocket/doc_classes/WebSocketServer.xml
blob: 07a55b73f11abe3256c9413c30807f8a77be1bc2 (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
<?xml version="1.0" encoding="UTF-8" ?>
<class name="WebSocketServer" inherits="WebSocketMultiplayerPeer" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
	<brief_description>
		A WebSocket server implementation.
	</brief_description>
	<description>
		This class implements a WebSocket server that can also support the high-level multiplayer API.
		After starting the server ([method listen]), you will need to [method MultiplayerPeer.poll] it at regular intervals (e.g. inside [method Node._process]). When clients connect, disconnect, or send data, you will receive the appropriate signal.
		[b]Note:[/b] Not available in Web exports.
		[b]Note:[/b] When exporting to Android, make sure to enable the [code]INTERNET[/code] permission in the Android export preset before exporting the project or using one-click deploy. Otherwise, network communication of any kind will be blocked by Android.
	</description>
	<tutorials>
	</tutorials>
	<methods>
		<method name="disconnect_peer">
			<return type="void" />
			<param index="0" name="id" type="int" />
			<param index="1" name="code" type="int" default="1000" />
			<param index="2" name="reason" type="String" default="&quot;&quot;" />
			<description>
				Disconnects the peer identified by [code]id[/code] from the server. See [method WebSocketPeer.close] for more information.
			</description>
		</method>
		<method name="get_peer_address" qualifiers="const">
			<return type="String" />
			<param index="0" name="id" type="int" />
			<description>
				Returns the IP address of the given peer.
			</description>
		</method>
		<method name="get_peer_port" qualifiers="const">
			<return type="int" />
			<param index="0" name="id" type="int" />
			<description>
				Returns the remote port of the given peer.
			</description>
		</method>
		<method name="has_peer" qualifiers="const">
			<return type="bool" />
			<param index="0" name="id" type="int" />
			<description>
				Returns [code]true[/code] if a peer with the given ID is connected.
			</description>
		</method>
		<method name="is_listening" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if the server is actively listening on a port.
			</description>
		</method>
		<method name="listen">
			<return type="int" enum="Error" />
			<param index="0" name="port" type="int" />
			<param index="1" name="protocols" type="PackedStringArray" default="PackedStringArray()" />
			<param index="2" name="gd_mp_api" type="bool" default="false" />
			<description>
				Starts listening on the given port.
				You can specify the desired subprotocols via the "protocols" array. If the list empty (default), no sub-protocol will be requested.
				If [code]true[/code] is passed as [code]gd_mp_api[/code], the server will behave like a multiplayer peer for the [MultiplayerAPI], connections from non-Godot clients will not work, and [signal data_received] will not be emitted.
				If [code]false[/code] is passed instead (default), you must call [PacketPeer] functions ([code]put_packet[/code], [code]get_packet[/code], etc.), on the [WebSocketPeer] returned via [code]get_peer(id)[/code] to communicate with the peer with given [code]id[/code] (e.g. [code]get_peer(id).get_available_packet_count[/code]).
			</description>
		</method>
		<method name="set_extra_headers">
			<return type="void" />
			<param index="0" name="headers" type="PackedStringArray" default="PackedStringArray()" />
			<description>
				Sets additional headers to be sent to clients during the HTTP handshake.
			</description>
		</method>
		<method name="stop">
			<return type="void" />
			<description>
				Stops the server and clear its state.
			</description>
		</method>
	</methods>
	<members>
		<member name="bind_ip" type="String" setter="set_bind_ip" getter="get_bind_ip" default="&quot;*&quot;">
			When not set to [code]*[/code] will restrict incoming connections to the specified IP address. Setting [code]bind_ip[/code] to [code]127.0.0.1[/code] will cause the server to listen only to the local host.
		</member>
		<member name="ca_chain" type="X509Certificate" setter="set_ca_chain" getter="get_ca_chain">
			When using TLS (see [member private_key] and [member tls_certificate]), you can set this to a valid [X509Certificate] to be provided as additional CA chain information during the TLS handshake.
		</member>
		<member name="handshake_timeout" type="float" setter="set_handshake_timeout" getter="get_handshake_timeout" default="3.0">
			The time in seconds before a pending client (i.e. a client that has not yet finished the HTTP handshake) is considered stale and forcefully disconnected.
		</member>
		<member name="private_key" type="CryptoKey" setter="set_private_key" getter="get_private_key">
			When set to a valid [CryptoKey] (along with [member tls_certificate]) will cause the server to require TLS instead of regular TCP (i.e. the [code]wss://[/code] protocol).
		</member>
		<member name="tls_certificate" type="X509Certificate" setter="set_tls_certificate" getter="get_tls_certificate">
			When set to a valid [X509Certificate] (along with [member private_key]) will cause the server to require TLS instead of regular TCP (i.e. the [code]wss://[/code] protocol).
		</member>
	</members>
	<signals>
		<signal name="client_close_request">
			<param index="0" name="id" type="int" />
			<param index="1" name="code" type="int" />
			<param index="2" name="reason" type="String" />
			<description>
				Emitted when a client requests a clean close. You should keep polling until you get a [signal client_disconnected] signal with the same [code]id[/code] to achieve the clean close. See [method WebSocketPeer.close] for more details.
			</description>
		</signal>
		<signal name="client_connected">
			<param index="0" name="id" type="int" />
			<param index="1" name="protocol" type="String" />
			<param index="2" name="resource_name" type="String" />
			<description>
				Emitted when a new client connects. "protocol" will be the sub-protocol agreed with the client, and "resource_name" will be the resource name of the URI the peer used.
				"resource_name" is a path (at the very least a single forward slash) and potentially a query string.
			</description>
		</signal>
		<signal name="client_disconnected">
			<param index="0" name="id" type="int" />
			<param index="1" name="was_clean_close" type="bool" />
			<description>
				Emitted when a client disconnects. [code]was_clean_close[/code] will be [code]true[/code] if the connection was shutdown cleanly.
			</description>
		</signal>
		<signal name="data_received">
			<param index="0" name="id" type="int" />
			<description>
				Emitted when a new message is received.
				[b]Note:[/b] This signal is [i]not[/i] emitted when used as high-level multiplayer peer.
			</description>
		</signal>
	</signals>
</class>