summaryrefslogtreecommitdiff
path: root/core/io
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2014-11-13 00:53:12 -0300
committerJuan Linietsky <reduzio@gmail.com>2014-11-13 00:53:12 -0300
commitabbea4d945bbb1114570c3b6c7f649e01ca8ebb8 (patch)
treed2b131b32705bbcf118efa72d5d9a21618c1227e /core/io
parentd02953c5963ca080d26500ea8250e0632a80b234 (diff)
UDP Fixes
-=-=-=-=- Curse the day I decided to port UDP code, as it ended up being two nights of work. At least It's done now (I hope). -Fixed UDP Support, API seems stable -Added UDP Chat demo (chat that can lose your packets, heh) -Added helpers to areas and bodies to get list of collided bodies and contained bodies. -Sped up screen/viewport capture code. -Added code to save an image as PNG -Small fix so scripts register their singletons after modules did.
Diffstat (limited to 'core/io')
-rw-r--r--core/io/ip_address.h6
-rw-r--r--core/io/packet_peer_udp.cpp20
-rw-r--r--core/io/packet_peer_udp.h4
3 files changed, 26 insertions, 4 deletions
diff --git a/core/io/ip_address.h b/core/io/ip_address.h
index cd39aa6c81..3cd8bb7733 100644
--- a/core/io/ip_address.h
+++ b/core/io/ip_address.h
@@ -39,6 +39,12 @@ struct IP_Address {
};
//operator Variant() const;
+ bool operator==(const IP_Address& p_ip) const {
+ return host==p_ip.host;
+ }
+ bool operator!=(const IP_Address& p_ip) const {
+ return host!=p_ip.host;
+ }
operator String() const;
IP_Address(const String& p_string);
IP_Address(uint8_t p_a,uint8_t p_b,uint8_t p_c,uint8_t p_d);
diff --git a/core/io/packet_peer_udp.cpp b/core/io/packet_peer_udp.cpp
index f301370944..83217ffc41 100644
--- a/core/io/packet_peer_udp.cpp
+++ b/core/io/packet_peer_udp.cpp
@@ -1,5 +1,5 @@
#include "packet_peer_udp.h"
-
+#include "io/ip.h"
PacketPeerUDP* (*PacketPeerUDP::_create)()=NULL;
@@ -15,17 +15,31 @@ String PacketPeerUDP::_get_packet_ip() const {
return get_packet_address();
}
+Error PacketPeerUDP::_set_send_address(const String& p_address,int p_port) {
+
+ IP_Address ip;
+ if (p_address.is_valid_ip_address()) {
+ ip=p_address;
+ } else {
+ ip=IP::get_singleton()->resolve_hostname(p_address);
+ if (ip==IP_Address())
+ return ERR_CANT_RESOLVE;
+ }
+
+ set_send_address(ip,p_port);
+ return OK;
+}
void PacketPeerUDP::_bind_methods() {
ObjectTypeDB::bind_method(_MD("listen:Error","port","recv_buf_size"),&PacketPeerUDP::listen,DEFVAL(65536));
ObjectTypeDB::bind_method(_MD("close"),&PacketPeerUDP::close);
- ObjectTypeDB::bind_method(_MD("poll:Error"),&PacketPeerUDP::poll);
+ ObjectTypeDB::bind_method(_MD("wait:Error"),&PacketPeerUDP::wait);
ObjectTypeDB::bind_method(_MD("is_listening"),&PacketPeerUDP::is_listening);
ObjectTypeDB::bind_method(_MD("get_packet_ip"),&PacketPeerUDP::_get_packet_ip);
ObjectTypeDB::bind_method(_MD("get_packet_address"),&PacketPeerUDP::_get_packet_address);
ObjectTypeDB::bind_method(_MD("get_packet_port"),&PacketPeerUDP::get_packet_port);
- ObjectTypeDB::bind_method(_MD("set_send_address","address","port"),&PacketPeerUDP::set_send_address);
+ ObjectTypeDB::bind_method(_MD("set_send_address","host","port"),&PacketPeerUDP::_set_send_address);
}
diff --git a/core/io/packet_peer_udp.h b/core/io/packet_peer_udp.h
index 049ac0132f..73ff487b19 100644
--- a/core/io/packet_peer_udp.h
+++ b/core/io/packet_peer_udp.h
@@ -15,11 +15,13 @@ protected:
int _get_packet_address() const;
String _get_packet_ip() const;
+ virtual Error _set_send_address(const String& p_address,int p_port);
+
public:
virtual Error listen(int p_port,int p_recv_buffer_size=65536)=0;
virtual void close()=0;
- virtual Error poll()=0;
+ virtual Error wait()=0;
virtual bool is_listening() const=0;
virtual IP_Address get_packet_address() const=0;
virtual int get_packet_port() const=0;