chat.gd 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. extends Panel
  2. # Really simple UDP chat client, not intended as a comprehensive chat implementation.
  3. # (UDP can lose packets and you won't normally find out, so don't do a chat this way)
  4. # This is just a demo that shows how to use the UDP class.
  5. # Member variables
  6. var udp = PacketPeerUDP.new()
  7. func _process(delta):
  8. if (not udp.is_listening()):
  9. return
  10. while(udp.get_available_packet_count() > 0):
  11. var packet = udp.get_var()
  12. if (typeof(packet) == TYPE_STRING):
  13. var host = udp.get_packet_ip()
  14. var port = udp.get_packet_port()
  15. get_node("chat/text").add_text("(" + host + ":" + str(port) + ":) " + packet)
  16. get_node("chat/text").newline()
  17. func _ready():
  18. get_node("chat").add_style_override("panel", get_stylebox("bg", "Tree"))
  19. set_process(true)
  20. func send_message(text):
  21. if (udp.is_listening()):
  22. udp.put_var(text)
  23. func _on_connect_toggled(pressed):
  24. if (pressed):
  25. var err = udp.listen(get_node("listen_port").get_val())
  26. if (err != OK):
  27. get_node("status").set_text("Error:\nCan't listen.")
  28. get_node("connect").set_pressed(false)
  29. else:
  30. get_node("status").set_text("Connected.")
  31. get_node("connect").set_text("Disconnect")
  32. err = udp.set_send_address(get_node("remote_host").get_text(),get_node("remote_port").get_val())
  33. if (err != OK):
  34. get_node("status").set_text("Error:\nCan't resolve.")
  35. get_node("connect").set_pressed(false)
  36. else:
  37. send_message("* " + get_node("user_name").get_text() + " entered chat.")
  38. else:
  39. udp.close()
  40. get_node("status").set_text("Disconnected.")
  41. get_node("connect").set_text("Connect")
  42. func _on_entry_line_text_entered(text):
  43. _on_entry_button_pressed()
  44. func _on_entry_button_pressed():
  45. var msg = get_node("entry_line").get_text()
  46. if (msg == ""):
  47. return
  48. send_message(get_node("user_name").get_text() + "> " + msg)
  49. get_node("entry_line").set_text("")