Browse Source

Merge pull request #1157 from Faless/feat/rpc_test

Add RPC tests.
Rémi Verschelde 2 years ago
parent
commit
3e44ad1867
3 changed files with 39 additions and 0 deletions
  1. 7 0
      test/project/main.gd
  2. 26 0
      test/src/example.cpp
  3. 6 0
      test/src/example.h

+ 7 - 0
test/project/main.gd

@@ -101,6 +101,13 @@ func _ready():
 	assert_equal(example.test_bitfield(0), 0)
 	assert_equal(example.test_bitfield(Example.FLAG_ONE | Example.FLAG_TWO), 3)
 
+	# RPCs.
+	assert_equal(example.return_last_rpc_arg(), 0)
+	example.test_rpc(42)
+	assert_equal(example.return_last_rpc_arg(), 42)
+	example.test_send_rpc(100)
+	assert_equal(example.return_last_rpc_arg(), 100)
+
 	# Virtual method.
 	var event = InputEventKey.new()
 	event.key_label = KEY_H

+ 26 - 0
test/src/example.cpp

@@ -9,6 +9,8 @@
 
 #include <godot_cpp/classes/global_constants.hpp>
 #include <godot_cpp/classes/label.hpp>
+#include <godot_cpp/classes/multiplayer_api.hpp>
+#include <godot_cpp/classes/multiplayer_peer.hpp>
 #include <godot_cpp/variant/utility_functions.hpp>
 
 using namespace godot;
@@ -48,6 +50,14 @@ int Example::def_args(int p_a, int p_b) {
 }
 
 void Example::_notification(int p_what) {
+	if (p_what == NOTIFICATION_READY) {
+		Dictionary opts;
+		opts["rpc_mode"] = MultiplayerAPI::RPC_MODE_AUTHORITY;
+		opts["transfer_mode"] = MultiplayerPeer::TRANSFER_MODE_RELIABLE;
+		opts["call_local"] = true;
+		opts["channel"] = 0;
+		rpc_config("test_rpc", opts);
+	}
 	//UtilityFunctions::print("Notification: ", String::num(p_what));
 }
 
@@ -132,6 +142,10 @@ void Example::_bind_methods() {
 
 	ClassDB::bind_method(D_METHOD("test_bitfield", "flags"), &Example::test_bitfield);
 
+	ClassDB::bind_method(D_METHOD("test_rpc", "value"), &Example::test_rpc);
+	ClassDB::bind_method(D_METHOD("test_send_rpc", "value"), &Example::test_send_rpc);
+	ClassDB::bind_method(D_METHOD("return_last_rpc_arg"), &Example::return_last_rpc_arg);
+
 	ClassDB::bind_method(D_METHOD("def_args", "a", "b"), &Example::def_args, DEFVAL(100), DEFVAL(200));
 
 	ClassDB::bind_static_method("Example", D_METHOD("test_static", "a", "b"), &Example::test_static);
@@ -333,6 +347,18 @@ BitField<Example::Flags> Example::test_bitfield(BitField<Flags> flags) {
 	return flags;
 }
 
+void Example::test_rpc(int p_value) {
+	last_rpc_arg = p_value;
+}
+
+void Example::test_send_rpc(int p_value) {
+	rpc("test_rpc", p_value);
+}
+
+int Example::return_last_rpc_arg() {
+	return last_rpc_arg;
+}
+
 // Properties.
 void Example::set_custom_position(const Vector2 &pos) {
 	custom_position = pos;

+ 6 - 0
test/src/example.h

@@ -70,6 +70,7 @@ private:
 	Vector2 custom_position;
 	Vector3 property_from_list;
 	Vector2 dprop[3];
+	int last_rpc_arg = 0;
 
 public:
 	// Constants.
@@ -120,6 +121,11 @@ public:
 
 	BitField<Flags> test_bitfield(BitField<Flags> flags);
 
+	// RPC
+	void test_rpc(int p_value);
+	void test_send_rpc(int p_value);
+	int return_last_rpc_arg();
+
 	// Property.
 	void set_custom_position(const Vector2 &pos);
 	Vector2 get_custom_position() const;