Receive multiple chunks
This commit is contained in:
parent
18da6d23e1
commit
37864e9f11
|
@ -21,13 +21,25 @@ defmodule Gemini do
|
|||
{:ok, sock} ->
|
||||
Socket.Stream.send(sock, "#{URI.to_string(uri)}\r\n")
|
||||
|
||||
case Socket.Stream.recv(sock) do
|
||||
{:error, reason} ->
|
||||
{:error, reason}
|
||||
sock
|
||||
|> receive_loop()
|
||||
|> Gemini.Response.parse()
|
||||
end
|
||||
end
|
||||
|
||||
defp receive_loop(sock, acc \\ []) do
|
||||
res = Socket.Stream.recv(sock)
|
||||
|
||||
case res do
|
||||
{:ok, nil} ->
|
||||
Socket.Stream.close!(sock)
|
||||
|
||||
acc
|
||||
|> Enum.reverse()
|
||||
|> IO.iodata_to_binary()
|
||||
|
||||
{:ok, data} ->
|
||||
Gemini.Response.parse(data)
|
||||
end
|
||||
receive_loop(sock, [data | acc])
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue