]> Repositorios git - scryer-prolog.git/commitdiff
change EOFCode eof_action from end_of_stream to end_of_file, add echo_server.pl example
authorMark Thom <[email protected]>
Tue, 5 May 2020 20:15:16 +0000 (14:15 -0600)
committerMark Thom <[email protected]>
Tue, 5 May 2020 20:15:16 +0000 (14:15 -0600)
src/prolog/examples/echo_server.pl [new file with mode: 0644]
src/prolog/machine/streams.rs

diff --git a/src/prolog/examples/echo_server.pl b/src/prolog/examples/echo_server.pl
new file mode 100644 (file)
index 0000000..4543e60
--- /dev/null
@@ -0,0 +1,31 @@
+:- module(echo_server, [echo_server/0,
+                        echo_server/1]).
+
+:- use_module(library(format)).
+:- use_module(library(sockets)).
+
+
+echo_server :-
+    echo_server('127.0.0.1').
+
+
+echo_server(Addr) :-
+    socket_server_open(Addr:Port, ServerSocket),
+    format("echo_server: connection opened at ~w:~d~n", [Addr, Port]),
+    socket_server_accept(ServerSocket, Client, Stream, [eof_action(eof_code)]),
+    format("echo_server: connection accepted from ~a~n", [Client]),
+    !,
+    echo_loop(Stream),
+    socket_server_close(ServerSocket).
+
+
+echo_loop(Stream) :-
+    read_term(Stream, Term, []),
+    (  Term == end_of_file ->
+       true
+    ;
+       format("received: ~w~n", [Term]),
+       !,
+       echo_loop(Stream)
+    ).
+
index 3f09d6d102199be455307f6a3ad92ffa4dca7e0d..0c2d9aac7f8d53b1acc4757053135d4485c26c88 100644 (file)
@@ -356,7 +356,7 @@ impl MachineState {
             }
             EOFAction::EOFCode => {
                 let end_of_stream = self.heap.to_unifiable(
-                    HeapCellValue::Atom(clause_name!("end_of_stream"), None)
+                    HeapCellValue::Atom(clause_name!("end_of_file"), None)
                 );
 
                 stream.past_end_of_stream = true;