Edit

kc3-lang/kc3/event/misc

Branch :

  • echo.kc3
  • timeout = %Time{tv_sec: (Sw) 30}
    event_base = HTTP.Event.base_new()
    socket = Socket.listen("0.0.0.0", "57000")
    echo_client = fn (socket, events, client_ev, client) do
      puts("echo_client")
      if List.has?(events, :read) do
        s = Buf.read_until_str_into_str(client.buf_rw.r, "\n")
        puts("read: #{s}")
        if (s == "") do
          puts("closing")
          HTTP.Event.del(client_ev)
          Socket.close(client.sockfd)
          exit(0)
        end
        Buf.write_str(client.buf_rw.w, s)
      end
    end
    acceptor = fn (server_socket, events, acceptor_ev, void) do
      if List.has?(events, :read) do
        puts("acceptor: read")
        client = Socket.Buf.accept(%Socket{fd: server_socket})
        puts("acceptor: got client")
        client_ev = HTTP.Event.new(event_base, client.sockfd, [:read, :persist],
          echo_client, client)
        r = HTTP.Event.add(client_ev, timeout)
        puts("HTTP.Event.add: #{r}")
      end
    end
    puts("socket.fd: #{socket.fd}")
    puts("event_base: #{event_base}")
    acceptor_ev = HTTP.Event.new(event_base, socket.fd, [:read, :persist],
                                 acceptor, void)
    puts("acceptor_ev: #{acceptor_ev}")
    r = HTTP.Event.add(acceptor_ev, timeout)
    puts("HTTP.Event.add: #{r}")
    r = HTTP.Event.dispatch(event_base)
    if r do
      e = errno()
      puts("HTTP.Event.dispatch: #{r}: #{strerror(e)}")
    end