From c72b78a6eb7ba3f6138cb98b7b70056bc9f481d0 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Mon, 3 Jun 2019 15:20:15 +0200 Subject: Add documentation for WebRTC classes. --- modules/webrtc/doc_classes/WebRTCDataChannel.xml | 21 ++++++ modules/webrtc/doc_classes/WebRTCMultiplayer.xml | 85 ++++++++++++++++++++++ .../webrtc/doc_classes/WebRTCPeerConnection.xml | 63 ++++++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 modules/webrtc/doc_classes/WebRTCMultiplayer.xml (limited to 'modules/webrtc/doc_classes') diff --git a/modules/webrtc/doc_classes/WebRTCDataChannel.xml b/modules/webrtc/doc_classes/WebRTCDataChannel.xml index dcc14d4ddb..f03ae864f8 100644 --- a/modules/webrtc/doc_classes/WebRTCDataChannel.xml +++ b/modules/webrtc/doc_classes/WebRTCDataChannel.xml @@ -11,85 +11,106 @@ + Closes this data channel, notifying the other peer. + Returns the id assigned to this channel during creation (or auto-assigned during negotiation). + If the channel is not negotiated out-of-band the id will only be available after the connection is established (will return [code]65535[/code] until then). + Returns the label assigned to this channel during creation. + Returns the maxPacketLifeTime value assigned to this channel during creation. + Will be [code]65535[/code] if not specified. + Returns the maxRetransmits value assigned to this channel during creation. + Will be [code]65535[/code] if not specified. + Returns the sub-proctocol assigned to this channel during creation. An empty string if not specified. + Returns the current state of this channel, see [enum WebRTCDataChannel.ChannelState]. + Returns [code]true[/code] if this channel was created with out-of-band configuration. + Returns [code]true[/code] if this channel was created with ordering enabled (default). + Reserved, but not used for now. + Returns [code]true[/code] if the last received packet was transfered as text. See [property write_mode]. + The transfer mode to use when sending outgoing packet. Either text or binary. + Tells the channel to send data over this channel as text. An external peer (non-godot) would receive this as a string. + Tells the channel to send data over this channel as binary. An external peer (non-godot) would receive this as arraybuffer or blob. + The channel was created, but it's still trying to connect. + The channel is currently open, and data can flow over it. + The channel is being closed, no new messages will be accepted, but those already in queue will be flushed. + The channel was closed, or connection failed. diff --git a/modules/webrtc/doc_classes/WebRTCMultiplayer.xml b/modules/webrtc/doc_classes/WebRTCMultiplayer.xml new file mode 100644 index 0000000000..2b0622fffa --- /dev/null +++ b/modules/webrtc/doc_classes/WebRTCMultiplayer.xml @@ -0,0 +1,85 @@ + + + + A simple interface to create a peer-to-peer mesh network composed of [WebRTCPeerConnection] that is compatible with the [MultiplayerAPI]. + + + This class constructs a full mesh of [WebRTCPeerConnection] (one connection for each peer) that can be used as a [member MultiplayerAPI.network_peer]. + You can add each [WebRTCPeerConnection] via [method add_peer] or remove them via [method remove_peer]. Peers must be added in [constant WebRTCPeerConnection.STATE_NEW] state to allow it to create the appropriate channels. This class will not create offers nor set descriptions, it will only poll them, and notify connections and disconnections. + [signal NetworkedMultiplayerPeer.connection_succeeded] and [signal NetworkedMultiplayerPeer.server_disconnected] will not be emitted unless [code]server_compatibility[/code] is [code]true[/code] in [method initialize]. Beside that data transfer works like in a [NetworkedMultiplayerPeer]. + + + + + + + + + + + + + + + Add a new peer to the mesh with the given [code]peer_id[/code]. The [WebRTCPeerConnection] must be in state [constant WebRTCPeerConnection.STATE_NEW]. + Three channels will be created for reliable, unreliable, and ordered transport. The value of [code]unreliable_lifetime[/code] will be passed to the [code]maxPacketLifetime[/code] option when creating unreliable and ordered channels (see [method WebRTCPeerConnection.create_data_channel]). + + + + + + + Close all the add peer connections and channels, freeing all resources. + + + + + + + + + Return a dictionary representation of the peer with given [code]peer_id[/code] with three keys. [code]connection[/code] containing the [WebRTCPeerConnection] to this peer, [code]channels[/code] an array of three [WebRTCDataChannel], and [code]connected[/code] a boolean representing if the peer connection is currently connected (all three channels are open). + + + + + + + Returns a dictionary which keys are the peer ids and values the peer representation as in [method get_peer] + + + + + + + + + Returns [code]true[/code] if the given [code]peer_id[/code] is in the peers map (it might not be connected though). + + + + + + + + + + + Initialize the multiplayer peer with the given [code]peer_id[/code] (must be between 1 and 2147483647). + If [code]server_compatibilty[/code] is [code]false[/code] (default), the multiplayer peer will be immediately in state [constant NetworkedMultiplayerPeer.CONNECTION_CONNECTED] and [signal NetworkedMultiplayerPeer.connection_succeeded] will not be emitted. + If [code]server_compatibilty[/code] is [code]true[/code] the peer will suppress all [signal NetworkedMultiplayerPeer.peer_connected] signals until a peer with id [constant NetworkedMultiplayerPeer.TARGET_PEER_SERVER] connects and then emit [signal NetworkedMultiplayerPeer.connection_succeeded]. After that the signal [signal NetworkedMultiplayerPeer.peer_connected] will be emitted for every already connected peer, and any new peer that might connect. If the server peer disconnects after that, signal [signal NetworkedMultiplayerPeer.server_disconnected] will be emitted and state will become [constant NetworkedMultiplayerPeer.CONNECTION_CONNECTED]. + + + + + + + + + Remove the peer with given [code]peer_id[/code] from the mesh. If the peer was connected, and [signal NetworkedMultiplayerPeer.peer_connected] was emitted for it, then [signal NetworkedMultiplayerPeer.peer_disconnected] will be emitted. + + + + + + diff --git a/modules/webrtc/doc_classes/WebRTCPeerConnection.xml b/modules/webrtc/doc_classes/WebRTCPeerConnection.xml index 8b14c60deb..aa2c856b6e 100644 --- a/modules/webrtc/doc_classes/WebRTCPeerConnection.xml +++ b/modules/webrtc/doc_classes/WebRTCPeerConnection.xml @@ -1,8 +1,17 @@ + Interface to a WebRTC peer connection. + A WebRTC connection between the local computer and a remote peer. Provides an interface to connect, maintain and monitor the connection. + + Setting up a WebRTC connection between two peers from now on) may not seem a trival task, but it can be broken down into 3 main steps: + - The peer that wants to initiate the connection ([code]A[/code] from now on) creates an offer and send it to the other peer ([code]B[/code] from now on). + - [code]B[/code] receives the offer, generate and answer, and sends it to [code]B[/code]). + - [code]A[/code] and [code]B[/code] then generates and exchange ICE candiates with each other. + + After these steps, the connection should become connected. Keep on reading or look into the tutorial for more information. @@ -17,12 +26,14 @@ + Add an ice candidate generated by a remote peer (and received over the signaling server). See [signal ice_candidate_created]. + Close the peer connection and all data channels associated with it. Note, you cannot reuse this object for a new connection unless you call [method initialize]. @@ -35,18 +46,38 @@ }"> + Returns a new [WebRTCDataChannel] (or [code]null[/code] on failure) with given [code]label[/code] and optionally configured via the [code]options[/code] dictionary. This method can only be called when the connection is in state [constant STATE_NEW]. + There are two ways to create a working data channel: either call [method create_data_channel] on only one of the peer and listen to [signal data_channel_received] on the other, or call [method create_data_channel] on both peers, with the same values, and the [code]negotiated[/code] option set to [code]true[/code]. + Valid [code]options[/code] are: + [code] + { + "negotiated": true, # When set to true (default off), means the channel is negotiated out of band. "id" must be set too. data_channel_received will not be called. + "id": 1, # When "negotiated" is true this value must also be set to the same value on both peer. + + # Only one of maxRetransmits and maxPacketLifeTime can be specified, not both. They make the channel unreliable (but also better at real time). + "maxRetransmits": 1, # Specify the maximum number of attempt the peer will make to retransmits packets if they are not acknowledged. + "maxPacketLifeTime": 100, # Specify the maximum amount of time before giving up retransmitions of unacknowledged packets (in milliseconds). + "ordered": true, # When in unreliable mode (i.e. either "maxRetransmits" or "maxPacketLifetime" is set), "ordered" (true by default) specify if packet ordering is to be enforced. + + "protocol": "my-custom-protocol", # A custom sub-protocol string for this channel. + } + [/code] + NOTE: You must keep a reference to channels created this way, or it will be closed. + Creates a new SDP offer to start a WebRTC connection with a remote peer. At least one [WebRTCDataChannel] must have been created before calling this method. + If this functions returns [code]OK[/code], [signal session_description_created] will be called when the session is ready to be sent. + Returns the connection state. See [enum ConnectionState]. @@ -57,12 +88,29 @@ }"> + Re-initialize this peer connection, closing any previously active connection, and going back to state [constant STATE_NEW]. A dictionary of [code]options[/code] can be passed to configure the peer connection. + Valid [code]options[/code] are: + [code] + { + "iceServers": [ + { + "urls": [ "stun:stun.example.com:3478" ], # One or more STUN servers. + }, + { + "urls": [ "turn:turn.example.com:3478" ], # One or more TURN servers. + "username": "a_username", # Optional username for the TURN server. + "credentials": "a_password", # Optional password for the TURN server. + } + ] + } + [/code] + Call this method frequently (e.g. in [method Node._process] or [method Node._fixed_process]) to properly receive signals. @@ -73,6 +121,8 @@ + Sets the SDP description of the local peer. This should be called in response to [signal session_description_created]. + If [code]type[/code] is [code]answer[/code] the peer will start emitting [signal ice_candidate_created]. @@ -83,6 +133,9 @@ + Sets the SDP description of the remote peer. This should be called with the values generated by a remote peer and received over the signaling server. + If [code]type[/code] is [code]offer[/code] the peer will emit [signal session_description_created] with the appropriate answer. + If [code]type[/code] is [code]answer[/code] the peer will start emitting [signal ice_candidate_created]. @@ -91,6 +144,8 @@ + Emitted when a new in-band channel is received, i.e. when the channel was created with [code]negotiated: false[/code] (default). + The object will be an instance of [WebRTCDataChannel]. You must keep a reference of it or it will be closed automatically. See [method create_data_channel] @@ -101,6 +156,7 @@ + Emitted when a new ICE candidate has been created. The three parameters are meant to be passed to the remote peer over the signaling server. @@ -109,21 +165,28 @@ + Emitted after a successful call to [method create_offer] or [method set_remote_description] (when it generates an answer). The parameters are meant to be passed to [method set_local_description] on this object, and sent to the remote peer over the signaling server. + The connection is new, data channels and an offer can be created in this state. + The peer is connecting, ICE is in progress, non of the transports has failed. + The peer is connected, all ICE transports are connected. + At least one ICE transport is disconnected. + One or more of the ICE transports failed. + The peer connection is closed (after calling [method close] for example). -- cgit v1.2.3