mirror of
https://github.com/Heretek-AI/GDevelop.git
synced 2026-07-24 11:55:28 -04:00
a8559bfbbc
* Update all CMakeLists of extensions to use clang-format * Run clang-format on all Extensions * Update GDCore CMakeLists.txt to add clang-format * Run clang-format on GDCore files * Update GDJS and GDCpp CMakeLists.txt to add clang-format * Run clang-format on GDCpp and GDJS files
322 lines
13 KiB
C++
322 lines
13 KiB
C++
/**
|
|
|
|
GDevelop - Network Extension
|
|
Copyright (c) 2010-2016 Florian Rival (Florian.Rival@gmail.com)
|
|
This project is released under the MIT License.
|
|
*/
|
|
|
|
#include "GDCpp/Extensions/ExtensionBase.h"
|
|
|
|
#include "GDCpp/Runtime/CommonTools.h"
|
|
#include "NetworkBehavior.h"
|
|
#include "NetworkManager.h"
|
|
|
|
#include <SFML/Network.hpp>
|
|
|
|
/**
|
|
* \brief This class declares information about the extension.
|
|
*/
|
|
class Extension : public ExtensionBase {
|
|
public:
|
|
/**
|
|
* Constructor of an extension declares everything the extension contains:
|
|
* objects, actions, conditions and expressions.
|
|
*/
|
|
Extension() {
|
|
SetExtensionInformation("Network",
|
|
_("Network features"),
|
|
_("This Built-in extension can exchange data on "
|
|
"the network between games."),
|
|
"Florian Rival",
|
|
"Open source (MIT License)");
|
|
|
|
MarkAsDeprecated();
|
|
|
|
#if defined(GD_IDE_ONLY)
|
|
|
|
AddAction("AddRecipient",
|
|
_("Add a recipient"),
|
|
_("Add the computer with the corresponding IP Adress as a "
|
|
"recipient of sent data."),
|
|
_("Add _PARAM0_ to recipients"),
|
|
_("Network: Sending"),
|
|
"CppPlatform/Extensions/networkicon24.png",
|
|
"CppPlatform/Extensions/networkicon.png")
|
|
|
|
.AddParameter("string", _("Recipient IP address."))
|
|
.AddParameter(
|
|
"expression", _("Recipient port (Default : 50001)"), "", true)
|
|
|
|
.SetFunctionName("GDpriv::NetworkExtension::AddRecipient")
|
|
.SetIncludeFile("Network/NetworkManagerFunctions.h");
|
|
|
|
AddAction("RemoveAllRecipients",
|
|
_("Delete all recipients"),
|
|
_("Clear the list of the recipients of sent data"),
|
|
_("Clear the list of recipients"),
|
|
_("Network: Sending"),
|
|
"CppPlatform/Extensions/networkicon24.png",
|
|
"CppPlatform/Extensions/networkicon.png")
|
|
|
|
.SetFunctionName("GDpriv::NetworkExtension::RemoveAllRecipients")
|
|
.SetIncludeFile("Network/NetworkManagerFunctions.h");
|
|
|
|
AddAction("ListenToPort",
|
|
_("Initialize data reception"),
|
|
_("Initialize the network so you can receive data from other "
|
|
"computers."),
|
|
_("Initialize data reception"),
|
|
_("Network: Reception"),
|
|
"CppPlatform/Extensions/networkicon24.png",
|
|
"CppPlatform/Extensions/networkicon.png")
|
|
|
|
.AddParameter(
|
|
"expression", _("Listening port (Default : 50001)"), "", true)
|
|
.SetDefaultValue("50001")
|
|
.SetFunctionName("GDpriv::NetworkExtension::ListenToPort")
|
|
.SetIncludeFile("Network/NetworkManagerFunctions.h");
|
|
|
|
AddAction("StopListening",
|
|
_("Stop data reception"),
|
|
_("Stop data reception."),
|
|
_("Stop data reception"),
|
|
_("Network: Reception"),
|
|
"CppPlatform/Extensions/networkicon24.png",
|
|
"CppPlatform/Extensions/networkicon.png")
|
|
|
|
.SetFunctionName("GDpriv::NetworkExtension::ActStopListening")
|
|
.SetIncludeFile("Network/NetworkManagerFunctions.h");
|
|
|
|
AddAction("SendValue",
|
|
_("Send a value"),
|
|
_("Send a value to recipients"),
|
|
_("Send value _PARAM1_ with title _PARAM0_ to recipients"),
|
|
_("Network: Sending"),
|
|
"CppPlatform/Extensions/networkicon24.png",
|
|
"CppPlatform/Extensions/networkicon.png")
|
|
|
|
.AddParameter("string", _("Group"))
|
|
.AddParameter("expression", _("Value"))
|
|
|
|
.SetFunctionName("GDpriv::NetworkExtension::SendValue")
|
|
.SetIncludeFile("Network/NetworkManagerFunctions.h");
|
|
|
|
AddAction("SendString",
|
|
_("Send a text"),
|
|
_("Send a text to recipients"),
|
|
_("Send text _PARAM1_ with title _PARAM0_ to recipients"),
|
|
_("Network: Sending"),
|
|
"CppPlatform/Extensions/networkicon24.png",
|
|
"CppPlatform/Extensions/networkicon.png")
|
|
|
|
.AddParameter("string", _("Group"))
|
|
.AddParameter("string", _("Text"))
|
|
|
|
.SetFunctionName("GDpriv::NetworkExtension::SendString")
|
|
.SetIncludeFile("Network/NetworkManagerFunctions.h");
|
|
|
|
AddAction("ReceivePackets",
|
|
_("Receive waiting data"),
|
|
_("Receive data sent by other computers.\nYou can then access "
|
|
"them with the appropriate expressions."),
|
|
_("Receive data"),
|
|
_("Network: Reception"),
|
|
"CppPlatform/Extensions/networkicon24.png",
|
|
"CppPlatform/Extensions/networkicon.png")
|
|
|
|
.SetFunctionName("GDpriv::NetworkExtension::ReceivePackets")
|
|
.SetIncludeFile("Network/NetworkManagerFunctions.h");
|
|
|
|
AddAction("ResetReceivedData",
|
|
_("Delete all received data stored in memory"),
|
|
_("Delete all received data stored in memory"),
|
|
_("Delete all received data stored in memory"),
|
|
_("Network: Reception"),
|
|
"CppPlatform/Extensions/networkicon24.png",
|
|
"CppPlatform/Extensions/networkicon.png")
|
|
|
|
.SetFunctionName("GDpriv::NetworkExtension::ResetReceivedData")
|
|
.SetIncludeFile("Network/NetworkManagerFunctions.h");
|
|
|
|
AddStrExpression("GetReceivedDataString",
|
|
_("Get the text of a data"),
|
|
_("Get the text contained in data"),
|
|
_("Network: Reception"),
|
|
"CppPlatform/Extensions/networkicon.png")
|
|
.AddParameter("string",
|
|
_("Name of the data containing the text to get"))
|
|
|
|
.SetFunctionName("GDpriv::NetworkExtension::GetReceivedDataString")
|
|
.SetIncludeFile("Network/NetworkManagerFunctions.h");
|
|
|
|
AddExpression("GetReceivedDataValue",
|
|
_("Get the value of data"),
|
|
_("Get the value contained in data"),
|
|
_("Network: Reception"),
|
|
"CppPlatform/Extensions/networkicon.png")
|
|
.AddParameter("string",
|
|
_("Name of the data containing the text to get"))
|
|
|
|
.SetFunctionName("GDpriv::NetworkExtension::GetReceivedDataValue")
|
|
.SetIncludeFile("Network/NetworkManagerFunctions.h");
|
|
|
|
AddStrExpression("GetLastError",
|
|
_("Last error occured"),
|
|
_("Get the text describing the last error which occured."),
|
|
_("Network: Errors"),
|
|
"res/error.png")
|
|
|
|
.SetFunctionName("GDpriv::NetworkExtension::GetLastError")
|
|
.SetIncludeFile("Network/NetworkManagerFunctions.h");
|
|
|
|
AddStrExpression("GetPublicAddress",
|
|
_("IP address"),
|
|
_("Allow getting the public IP Address of the computer."),
|
|
_("Network"),
|
|
"CppPlatform/Extensions/networkicon.png")
|
|
.AddParameter("expression",
|
|
_("Maximum time to wait before getting the address ( in "
|
|
"seconds ) ( 0 = no timeout )"),
|
|
"",
|
|
true)
|
|
|
|
.SetFunctionName("GDpriv::NetworkExtension::GetPublicAddress")
|
|
.SetIncludeFile("Network/NetworkManagerFunctions.h");
|
|
|
|
AddStrExpression("GetLocalAddress",
|
|
_("Local IP address ( local/LAN )"),
|
|
_("Allow getting the public IP Address of the computer."),
|
|
_("Network"),
|
|
"CppPlatform/Extensions/networkicon.png")
|
|
|
|
.SetFunctionName("GDpriv::NetworkExtension::GetLocalAddress")
|
|
.SetIncludeFile("Network/NetworkManagerFunctions.h");
|
|
|
|
AddAction("GenerateObjectNetworkId",
|
|
_("Generate objects' identifiers"),
|
|
_("Generate identifiers automatically for these objects.\nNote "
|
|
"that this action must preferably be used at the start of the "
|
|
"scene. For example, so you can be sure objects\nhave the same "
|
|
"unique identifiers on all participating computers."),
|
|
_("Generate unique network identifiers for _PARAM0_"),
|
|
_("Behavior Automatic Network Updater"),
|
|
"CppPlatform/Extensions/networkicon24.png",
|
|
"CppPlatform/Extensions/networkicon.png")
|
|
|
|
.AddParameter("objectList", _("Object"))
|
|
.AddParameter("behavior", _("Behavior"), "NetworkBehavior")
|
|
.SetFunctionName("NetworkBehavior::GenerateObjectNetworkIdentifier")
|
|
.SetIncludeFile("Network/NetworkBehavior.h");
|
|
|
|
#endif
|
|
|
|
{
|
|
gd::BehaviorMetadata& aut =
|
|
AddBehavior("NetworkBehavior",
|
|
_("Automatic network update"),
|
|
_("NetworkUpdater"),
|
|
_("Allows automatically synchronizing the objects of a "
|
|
"game on the network."),
|
|
"",
|
|
"CppPlatform/Extensions/networkicon32.png",
|
|
"NetworkBehavior",
|
|
std::make_shared<NetworkBehavior>(),
|
|
std::make_shared<SceneNetworkDatas>());
|
|
|
|
#if defined(GD_IDE_ONLY)
|
|
aut.SetIncludeFile("Network/NetworkBehavior.h");
|
|
|
|
aut.AddAction(
|
|
"SetAsSender",
|
|
_("Set to send data"),
|
|
_("The behavior will send the data of the objects.\nYou must to "
|
|
"generate the identifiers for these objects before this step."),
|
|
_("Set _PARAM0_ to send data"),
|
|
_("Behavior Automatic Network Updater"),
|
|
"CppPlatform/Extensions/networkicon24.png",
|
|
"CppPlatform/Extensions/networkicon.png")
|
|
|
|
.AddParameter("object", _("Object"))
|
|
.AddParameter("behavior", _("Behavior"), "NetworkBehavior")
|
|
.SetFunctionName("SetAsSender")
|
|
.SetIncludeFile("Network/NetworkBehavior.h");
|
|
|
|
aut.AddAction("SetAsReceiver",
|
|
_("Set to receive data"),
|
|
_("The behavior will receive the data and will update the "
|
|
"objects.\nYou must generate the identifiers for these "
|
|
"objects before this step."),
|
|
_("Set _PARAM0_ to receive data"),
|
|
_("Behavior Automatic Network Updater"),
|
|
"CppPlatform/Extensions/networkicon24.png",
|
|
"CppPlatform/Extensions/networkicon.png")
|
|
|
|
.AddParameter("object", _("Object"))
|
|
.AddParameter("behavior", _("Behavior"), "NetworkBehavior")
|
|
.SetFunctionName("SetAsReceiver")
|
|
.SetIncludeFile("Network/NetworkBehavior.h");
|
|
|
|
aut.AddAction("SetIdentifier",
|
|
_("Change object's identifier"),
|
|
_("Each object needs a unique identifier that's the same "
|
|
"on all computers, so it can be identified and updated."),
|
|
_("Set identifier of _PARAM0_ to _PARAM2_"),
|
|
_("Behavior Automatic Network Updater"),
|
|
"CppPlatform/Extensions/networkicon24.png",
|
|
"CppPlatform/Extensions/networkicon.png")
|
|
|
|
.AddParameter("object", _("Object"))
|
|
.AddParameter("behavior", _("Behavior"), "NetworkBehavior")
|
|
.AddParameter("expression", _("Identifier"))
|
|
.SetFunctionName("SetIdentifier")
|
|
.SetIncludeFile("Network/NetworkBehavior.h");
|
|
|
|
aut.AddExpression("GetIdentifier",
|
|
_("Get the identifier of the object"),
|
|
_("Get the identifier of the object"),
|
|
_("Behavior Automatic Network Updater"),
|
|
"res/texteicon.png")
|
|
.AddParameter("object", _("Object"))
|
|
.AddParameter("behavior", _("Behavior"), "NetworkBehavior")
|
|
.SetFunctionName("GetIdentifier")
|
|
.SetIncludeFile("Network/NetworkBehavior.h");
|
|
|
|
#endif
|
|
}
|
|
|
|
GD_COMPLETE_EXTENSION_COMPILATION_INFORMATION();
|
|
};
|
|
|
|
#if defined(GD_IDE_ONLY)
|
|
bool HasDebuggingProperties() const { return true; };
|
|
|
|
void GetPropertyForDebugger(std::size_t propertyNb,
|
|
gd::String& name,
|
|
gd::String& value) const {
|
|
if (propertyNb == 0) {
|
|
name = _("List of recipients");
|
|
const std::vector<std::pair<sf::IpAddress, short unsigned int> >& list =
|
|
NetworkManager::Get()->GetRecipientsList();
|
|
for (std::size_t i = 0; i < list.size(); ++i)
|
|
value += gd::String::FromLocale(list[i].first.toString()) +
|
|
_(" Port: ") + gd::String::From(list[i].second) + "; ";
|
|
}
|
|
}
|
|
|
|
bool ChangeProperty(std::size_t propertyNb, gd::String newValue) {
|
|
if (propertyNb == 0) return false;
|
|
return false;
|
|
}
|
|
|
|
std::size_t GetNumberOfProperties() const { return 1; }
|
|
#endif
|
|
};
|
|
|
|
/**
|
|
* Used by GDevelop to create the extension class
|
|
* -- Do not need to be modified. --
|
|
*/
|
|
extern "C" ExtensionBase* GD_EXTENSION_API CreateGDExtension() {
|
|
return new Extension;
|
|
}
|