summaryrefslogtreecommitdiff
path: root/modules/enet
AgeCommit message (Collapse)Author
2022-10-27[MP] Let MultiplayerAPI handle packet relaying and peer signaling.Fabio Alessandrelli
MultiplayerPeer changes: - Adds is_server_relay_supported virtual method Informs the upper MultiplayerAPI layer if it can signal peers connected to the server to other clients, and perform packet relaying among them. - Adds get_packet_channel and get_packet_mode virtual methods Allows the MultiplayerAPI to retrieve the channel and transfer modes to use when relaying the last received packet. SceneMultiplayerPeer changes: - Implement peer signaling and packet relaying when the MultiplayerPeer advertise they are supported. ENet, WebRTC, WebSocket changes: - Removed custom code for relaying from WebSocket and ENet, and let it be handled by the upper layer. - Update WebRTC to split create_client, create_server, and create_mesh, with the latter behaving like the old initialize with "server_compatibility = false", and the first two supporting the upper layer relaying protocol.
2022-10-07Fix MSVC warnings, rename shadowed variables, fix uninitialized values, ↵bruvzg
change warnings=all to use /W4.
2022-08-26[Net] Expose get_remote_address get_remote_port.Fabio Alessandrelli
2022-08-24Replace Array return types with TypedArray 3kobewi
2022-08-08Rename the argument tag to param in XML documentationYuri Sizov
2022-07-26[Net] Modularize multiplayer, expose MultiplayerAPI to extensions.Fabio Alessandrelli
- RPC configurations are now dictionaries. - Script.get_rpc_methods renamed to Script.get_rpc_config. - Node.rpc[_id] and Callable.rpc now return an Error. - Refactor MultiplayerAPI to allow extension. - New MultiplayerAPI.rpc method with Array argument (for scripts). - Move the default MultiplayerAPI implementation to a module.
2022-07-25Code quality: Fix header guards consistencyRémi Verschelde
Adds `header_guards.sh` bash script, used in CI to validate future changes. Can be run locally to fix invalid header guards.
2022-05-16Replace most uses of Map by HashMapreduz
* Map is unnecessary and inefficient in almost every case. * Replaced by the new HashMap. * Renamed Map to RBMap and Set to RBSet for cases that still make sense (order matters) but use is discouraged. There were very few cases where replacing by HashMap was undesired because keeping the key order was intended. I tried to keep those (as RBMap) as much as possible, but might have missed some. Review appreciated!
2022-05-04Refactor module initializationreduz
* Changed to use the same stages as extensions. * Makes the initialization more coherent, helping solve problems due to lack of stages. * Makes it easier to port between module and extension. * removed the DRIVER initialization level (no longer needed).
2022-03-10Discern between virtual and abstract class bindingsreduz
* Previous "virtual" classes (which can't be instantiated) are not corretly named "abstract". * Added a new "virtual" category for classes, they can't be instantiated from the editor, but can be inherited from script and extensions. * Converted a large amount of classes from "abstract" to "virtual" where it makes sense. Most classes that make sense have been converted. Missing: * Physics servers * VideoStream * Script* classes. which will go in a separate PR due to the complexity involved.
2022-02-15Add an XML schema for documentationHugo Locurcio
This makes it easier to spot syntax errors when editing the class reference. The schema is referenced locally so validation can still work offline. Each class XML's schema conformance is also checked on GitHub Actions.
2022-01-03Update copyright statements to 2022Rémi Verschelde
Happy new year to the wonderful Godot community!
2022-01-02Fix usage of "Return" in the docskobewi
2022-01-02Fix various typosluz paz
Found via ` codespell -q 3 -S ./thirdparty,*.po,./DONORS.md -L ackward,ang,ans,ba,beng,cas,childs,childrens,dof,doubleclick,expct,fave,findn,gird,hist,inout,leapyear,lod,nd,numer,ois,ony,paket,seeked,sinc,switchs,te,uint,varn` Update editor/import/resource_importer_layered_texture.cpp Co-authored-by: Raul Santos <raulsntos@gmail.com> Update doc/classes/TileSetScenesCollectionSource.xml Co-authored-by: Raul Santos <raulsntos@gmail.com> Update scene/gui/graph_edit.cpp Co-authored-by: Raul Santos <raulsntos@gmail.com> Update scene/resources/animation.cpp Co-authored-by: Raul Santos <raulsntos@gmail.com> Update scene/resources/animation.cpp Co-authored-by: Raul Santos <raulsntos@gmail.com> Update scene/resources/animation.cpp Co-authored-by: Raul Santos <raulsntos@gmail.com> Update scene/gui/rich_text_label.cpp Co-authored-by: Raul Santos <raulsntos@gmail.com> Revert previously committed change
2021-12-15[Net] ENet poll now only service the connection once.Jordan Schidlowsky
It used to call `enet_host_service` until all events were consumed, but that also meant constantly polling the connection leading to potentially unbounded processing time. It now only service the connection once, and instead consumes all the retrieved events via `enet_host_check_events`.
2021-12-15[Net] ENetMultiplayerPeer now sends fragmented packets unreliably too.Jordan Schidlowsky
It used to always send them reliably when transfer mode was unreliable or ordered if the packet size was more then the enet host MTU (1400 bytes by default). This commit also adds a warning when debug is enabled to explain the effects of sending fragmented packets unreliably.
2021-11-15Replace Godot docs URL with `$DOCS_URL` in XML class referenceRémi Verschelde
2021-10-05doc: Fix style inconsistencies for `[b]Note:[/b]` paragraphsRémi Verschelde
And fix up formatting not supported by makerst.
2021-10-01[Net] Rename RPC constants and annotation arguments.Fabio Alessandrelli
any -> any_peer sync -> call_local ordered -> unreliable_ordered Multiplayer.RPC_MODE_ANY -> RPC_MODE_ANY_PEER Multiplayer.TRANSFER_MODE_ORDERED -> TRANSFER_MODE_UNRELIABLE_ORDERED
2021-09-28Merge pull request #52481 from Faless/net/4.x_native_peersFabio Alessandrelli
[Net] Extension system for network peers, webrtc.
2021-09-27[ENet] Fix server not correctly relaying peer disconnects.Fabio Alessandrelli
2021-09-25Document Android permission requirements for network access where neededHugo Locurcio
2021-09-24[Net/Docs] Update extensions documentation.Fabio Alessandrelli
2021-09-24[Net] MultiplayerPeer cleanup, defaults.Fabio Alessandrelli
2021-09-20Don't generate empty doc sections and reduce code duplicationAaron Franke
2021-09-08Multiplayer networking renames/simplificationMax Hilbrunner
Removes _networking_ prefix from some methods and members, now that multiplayer has been largely moved out of Node and SceneTree and is seperated into its own set of classes.
2021-09-07[Net] Move multiplayer to core subdir, split RPCManager.Fabio Alessandrelli
Move multiplayer classes to "core/multiplayer" subdir. Move the RPCConfig and enums (TransferMode, RPCMode) to a separate file (multiplayer.h), and bind them to the global namespace. Move the RPC handling code to its own class (RPCManager). Renames "get_rpc_sender_id" to "get_remote_sender_id".
2021-09-02[Net] Silence ENetMultiplayerPeer close_connection.Fabio Alessandrelli
Used to print an error when it was not active, now it just returns immediately as per the documentation.
2021-08-23Document ENetConnection compression must match between client and serverHugo Locurcio
2021-08-22Replace HTTP links with HTTPS for sites with HTTPS versionsAaron Franke
2021-08-06[Net] Fix ENetMultiplayerPeer status during connection.Fabio Alessandrelli
While the client emitting "peer_connect" for the server, the status was still set to CONNECTION_CONNECTING, causing bugs in the upper layer.
2021-07-30[Net] Implement RPC channels in MultiplayerAPI.Fabio Alessandrelli
2021-07-30Merge pull request #51067 from akien-mga/doc-return-argument-self-closing-tagsRémi Verschelde
doc: Use self-closing tags for `return` and `argument`
2021-07-30doc: Use self-closing tags for `return` and `argument`Rémi Verschelde
For the time being we don't support writing a description for those, preferring having all details in the method's description. Using self-closing tags saves half the lines, and prevents contributors from thinking that they should write the argument or return documentation there.
2021-07-30[Net] Fix ENet 'connect_to_host' creating only one channel.Fabio Alessandrelli
Passing `0` to `enet_host_create` will allow the maximum amount of channel supported by ENet. For some reasons, `connect_to_host` will instead only create 1 channel when passed `0`. This commit normalize the behaviour to always allocate the maximum allowed channels when passing `0`.
2021-07-29[Net] Refactor ENetMultiplayerPeer to use ENet wrappers.Fabio Alessandrelli
2021-07-29[Net] Implement lower level ENet wrappers.Fabio Alessandrelli
2021-07-29[Net] Add generate_unique_id to MultiplayerPeer.Fabio Alessandrelli
Used by ENetMultiplayerPeer and WebSocketServer to generate network IDs, and exposed to the user for p2p networks (e.g. WebRTCMultiplayerPeer) and custom MultiplayerPeer implementations.
2021-07-18Optimize StringName usagereduz
* Added a new macro SNAME() that constructs and caches a local stringname. * Subsequent usages use the cached version. * Since these use a global static variable, a second refcounter of static usages need to be kept for cleanup time. * Replaced all theme usages by this new macro. * Replace all signal emission usages by this new macro. * Replace all call_deferred usages by this new macro. This is part of ongoing work to optimize GUI and the editor.
2021-07-16Enable range coder compression by default in NetworkedMultiplayerENetHugo Locurcio
From empirical testing, this seems to provide the best compression compared to other compression algorithms when used in the Multiplayer Bomber demo. Other algorithms may provide better compression ratios for more complex games, but some compression is probably better than no compression. Zstandard was also not very efficient in my testing, so I added a note in the documentation.
2021-07-13Implement the ability to disable classesreduz
* This PR adds the ability to disable classes when building. * For now it's only possible to do this via command like: `scons disable_classes=RayCast2D,Area3D` * Eventually, a proper UI will be implemented to create a build config file to do this at large scale, as well as detect what is used in the project.
2021-07-12[Net] Rename NetworkedMultiplayerENet to ENetMultiplayerPeer.Fabio Alessandrelli
2021-07-12[Net] Rename NetworkedMultiplayerPeer to MultiplayerPeer.Fabio Alessandrelli
2021-07-12[Net] Remove most multiplayer hooks from SceneTree.Fabio Alessandrelli
Use `multiplayer` or `get_multiplayer()` instead of `get_tree()`.
2021-06-17Merge pull request #48331 from Faless/net/4.x_enet_relay_laxRémi Verschelde
[Net] ENet non-relaying server now process broadcasts.
2021-05-20Fix typos with codespellRémi Verschelde
Using codespell 2.0.0. Method: ``` $ cat > ../godot-word-whitelist.txt << EOF ang curvelinear dof doubleclick fave findn GIRD leapyear lod merchantibility nd numer ois ony que seeked synching te uint unselect webp EOF $ codespell -w -q 3 -I ../godot-word-whitelist.txt --skip="./thirdparty,*.po" $ git diff // undo unwanted changes ```
2021-05-06Rename `IP_Unix`, `IP_Address` and `TCP_Server` to remove underscoresHugo Locurcio
2021-04-30[Net] ENet non-relaying server now process broadcasts.Fabio Alessandrelli
Setting `server_relay = false` prevents the server from letting clients communicate with each other, but without this fix, the server would also ignore broadcast packets. With this change, the server still does not relay messages to other clients, but will correctly process broadcast messages (and "exclusive" messages) as if they were directed to just the server.
2021-04-28Merge pull request #48235 from Faless/feature/network-local-port-enet-salvagedRémi Verschelde
[Net] Implement NetworkedMultiplayerENet.get_local_port
2021-04-28Implement NetworkedMultiplayerENet.get_local_portFabio Alessandrelli
Allows retrieving the local port to which the peer is bound.