Browse Source

#state.tail -> data, on_timeout handler

Anton Lebedevich 13 years ago
parent
commit
25359e3be4
1 changed files with 18 additions and 8 deletions
  1. 18 8
      src/pgsql_sock.erl

+ 18 - 8
src/pgsql_sock.erl

@@ -12,7 +12,14 @@
 -include("pgsql.hrl").
 -include("pgsql.hrl").
 -include("pgsql_binary.hrl").
 -include("pgsql_binary.hrl").
 
 
--record(state, {mod, sock, tail, backend, on_message, ready, timeout}).
+-record(state, {mod,
+                sock,
+                data,
+                backend,
+                on_message,
+                on_timeout,
+                ready,
+                timeout}).
 
 
 %% -- client interface --
 %% -- client interface --
 
 
@@ -77,15 +84,18 @@ handle_info({Error, Sock, Reason}, #state{sock = Sock} = State)
   when Error == tcp_error; Error == ssl_error ->
   when Error == tcp_error; Error == ssl_error ->
     {stop, {sock_error, Reason}, State};
     {stop, {sock_error, Reason}, State};
 
 
-handle_info({_, Sock, Data}, #state{tail = Tail, sock = Sock} = State) ->
-    on_tail(State#state{tail = <<Tail/binary, Data/binary>>}).
+handle_info(timeout, #state{on_timeout = OnTimeout} = State) ->
+    OnTimeout(State);
 
 
-on_tail(#state{tail = Tail, on_message = OnMessage} = State) ->
-    case pgsql_wire:decode_message(Tail) of
-        {Message, Tail2} ->
-            on_tail(OnMessage(Message, State#state{tail = Tail2}));
+handle_info({_, Sock, Data2}, #state{data = Data, sock = Sock} = State) ->
+    on_data({infinity, State#state{data = <<Data/binary, Data2/binary>>}}).
+
+on_data({Timeout, #state{data = Data, on_message = OnMessage} = State}) ->
+    case pgsql_wire:decode_message(Data) of
+        {Message, Tail} ->
+            on_data(OnMessage(Message, State#state{data = Tail}));
         _ ->
         _ ->
-            {noreply, State}
+            {noreply, State, Timeout}
     end.
     end.
 
 
 terminate(_Reason, _State) ->
 terminate(_Reason, _State) ->