Le mercredi 21 septembre 2016 à 15:21 +0100, Baptiste Gelez a écrit :
> Hi everyone,
> 
> I'm creating a little app that should be able to communicate with
> other 
> processes (both sending and receiving messages). I first tried to do
> it 
> by launching child processes and sending/receving messages with 
> stdout/stdin. But I didn't find how to receive a signal when the
> child 
> process is writing on his stdout.
> 
> Then, I tried with websockets. I use the libsoup solution. This is
> my 
> code :
> 
> const uint16 port = 8080;
> 
> InetAddress address = new InetAddress.loopback (SocketFamily.IPV4);
> InetSocketAddress inetaddress = new InetSocketAddress (address,
> port);
> 
> GLib.Socket socket = new GLib.Socket (SocketFamily.IPV4, 
> SocketType.STREAM, SocketProtocol.TCP);
> socket.bind (inetaddress, true);
> socket.listen ();
> 
> Server serv = new Server (null);
> serv.add_websocket_handler (null, null, null, (server, conn, path, 
> client) => {
>      conn.message.connect ((type, message) => {
>              // receive messages en responds ...
>          });
>      });
> serv.listen_socket (socket, 0);
> 
> But when I try to connect to ws://localhost (with JavaScript) it
> tells 
> me "Firefox can't establish a connection with the server at the
> address 
> ws://localhost/."
> 
> Valadoc and libsoup C documentation are really poor on Websockets.
> Can 
> you help me to find where is the problem, and how to solve it,
> please. 
> Or at least, giving me some example codes of websocket servers with 
> libsoup (I can't find any). Thank you.
> 
> Baptiste.
> _______________________________________________
> vala-list mailing list
> vala-list@gnome.org
> https://mail.gnome.org/mailman/listinfo/vala-list

You should try the 'ws://localhost:8080/' URI instead. It's also
necessary to run a GLib.MainLoop.

Also, you don't need to bind a socket manually if you only want to
listen on the loopback interface, 'listen_local' does that already.

Here's a fully working example:

    using GLib;
    using Soup;

    var serv = new Server (null);
    serv.add_websocket_handler (null, null, null, (server, conn, path,
    client) => {
         conn.message.connect ((type, message) => {
                 // receive messages en responds ...
             });
         });
    serv.listen_local(8080, 0);

    new MainLoop ().run ();

Then connect to 'ws://localhost:8080/'.

-- 
Guillaume Poirier-Morency <guillaumepoiriermore...@gmail.com>

Étudiant au baccalauréat en Informatique à l'Université de Montréal
Chercheur boursier à l'IRIC

Mon blog: https://arteymix.github.io/
Clé PGP: B1AD6EA5
_______________________________________________
vala-list mailing list
vala-list@gnome.org
https://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to