Main.vala 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using LibPeer;
  2. using LibPeer.Protocols.Stp.Streams;
  3. using LibPeer.Protocols.Mx2;
  4. using LibPeer.Util;
  5. namespace HelloWorldApp {
  6. class Main : PeerApplication {
  7. private uint8[] message = new uint8[] { 'H', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'l', 'd', '!' };
  8. public static int main(string[] args) {
  9. var t = new Main();
  10. t.initialise("hello-world");
  11. while (true) {};
  12. return 0;
  13. }
  14. protected override void on_incoming_stream (StpInputStream stream) {
  15. var message_length = new uint8[1];
  16. stream.read (message_length);
  17. var message = new uint8[message_length[0]];
  18. stream.read(message);
  19. print(@"A peer has made a connection to us! It has a message: \"$(new ByteComposer().add_byte_array(message).to_escaped_string())\"\n");
  20. reply_to_stream(stream).established.connect (s => acknowledge_message(s));
  21. }
  22. protected override void on_peer_available (InstanceReference peer) {
  23. print("A new peer is available!\n");
  24. establish_stream (peer).established.connect (send_message);
  25. }
  26. private void send_message(StpOutputStream stream) {
  27. print("I'm sending the peer a message\n");
  28. var data = new ByteComposer().add_byte((uint8)message.length).add_byte_array(message).to_byte_array();
  29. stream.write (data);
  30. stream.close();
  31. stream.reply.connect(on_reply);
  32. }
  33. private void on_reply(StpInputStream stream) {
  34. var data = new uint8[6];
  35. stream.read(data);
  36. stream.close();
  37. print(@"Remote peer says \"$(new ByteComposer().add_byte_array(data).to_escaped_string())\" for the message!\n");
  38. }
  39. private void acknowledge_message(StpOutputStream stream) {
  40. stream.write (new uint8[] {'T', 'h', 'a', 'n', 'k', 's'});
  41. stream.close();
  42. print("I told them thanks for the message!\n");
  43. }
  44. }
  45. }