class SFML::Network::UdpSocket
Connectionless UDP datagram socket. Bind a port to receive, send to (address, port). Stateless β every send/receive specifies the peer.
sock = SFML::Network::UdpSocket.new sock.bind(port: 9999) sock.send(βhelloβ, to: SFML::Network::IpAddress::LOCALHOST, port: 9000) status, bytes, addr, port = sock.receive(max: 1024)
Constants
- MAX_DATAGRAM_SIZE
-
Max UDP payload CSFML will send in one call.
Public Class Methods
Source
# File lib/sfml/network/udp_socket.rb, line 15 def initialize ptr = C::Network.sfUdpSocket_create raise NetworkError, "sfUdpSocket_create returned NULL" if ptr.null? @handle = FFI::AutoPointer.new(ptr, C::Network.method(:sfUdpSocket_destroy)) end
Public Instance Methods
Source
# File lib/sfml/network/udp_socket.rb, line 22 def bind(port:, address: IpAddress::ANY) addr = address.is_a?(IpAddress) ? address : IpAddress.from_string(address) code = C::Network.sfUdpSocket_bind(@handle, Integer(port), addr.struct) C::Network::STATUSES[code] end
Returns the bind.
Source
# File lib/sfml/network/udp_socket.rb, line 91 def blocking=(value) C::Network.sfUdpSocket_setBlocking(@handle, value ? true : false) end
Set the blocking.
Source
# File lib/sfml/network/udp_socket.rb, line 88 def blocking? = C::Network.sfUdpSocket_isBlocking(@handle) # Set the blocking. def blocking=(value) C::Network.sfUdpSocket_setBlocking(@handle, value ? true : false) end # Returns the local port. def local_port = C::Network.sfUdpSocket_getLocalPort(@handle) attr_reader :handle # :nodoc: end end
true if blocking.
Source
# File lib/sfml/network/udp_socket.rb, line 46 def receive(max: 1024) buf = FFI::MemoryPointer.new(:uint8, Integer(max)) received_size = FFI::MemoryPointer.new(:size_t) sender_addr = C::Network::IpAddress.new sender_port = FFI::MemoryPointer.new(:uint16) code = C::Network.sfUdpSocket_receive( @handle, buf, Integer(max), received_size, sender_addr.pointer, sender_port, ) status = C::Network::STATUSES[code] return [status, nil, nil, nil] unless status == :done n = received_size.read(:size_t) sip = IpAddress.wrap(sender_addr) sport = sender_port.read(:uint16) [status, buf.read_bytes(n), sip, sport] end
Returns [status, data, sender_ip, sender_port]. data is a binary String when status is :done, otherwise nil.
Source
# File lib/sfml/network/udp_socket.rb, line 74 def receive_packet pkt = Packet.new sender_addr = C::Network::IpAddress.new sender_port = FFI::MemoryPointer.new(:uint16) code = C::Network.sfUdpSocket_receivePacket( @handle, pkt.handle, sender_addr.pointer, sender_port, ) status = C::Network::STATUSES[code] return [status, nil, nil, nil] unless status == :done [status, pkt, IpAddress.wrap(sender_addr), sender_port.read(:uint16)] end
Returns [status, packet, sender_ip, sender_port]. Packet is nil for non-:done statuses.
Source
# File lib/sfml/network/udp_socket.rb, line 35 def send(data, to:, port:) bytes = data.to_s addr = to.is_a?(IpAddress) ? to : IpAddress.from_string(to) buf = FFI::MemoryPointer.new(:uint8, bytes.bytesize) buf.write_bytes(bytes) code = C::Network.sfUdpSocket_send(@handle, buf, bytes.bytesize, addr.struct, Integer(port)) C::Network::STATUSES[code] end
Returns the send.
Source
# File lib/sfml/network/udp_socket.rb, line 65 def send_packet(packet, to:, port:) raise ArgumentError, "expected SFML::Network::Packet" unless packet.is_a?(Packet) addr = to.is_a?(IpAddress) ? to : IpAddress.from_string(to) code = C::Network.sfUdpSocket_sendPacket(@handle, packet.handle, addr.struct, Integer(port)) C::Network::STATUSES[code] end
Send a structured SFML::Network::Packet to (to, port).
Source
# File lib/sfml/network/udp_socket.rb, line 29 def unbind C::Network.sfUdpSocket_unbind(@handle) self end
Returns the unbind.