]> Creatis software - CreaPhase.git/blobdiff - octave_packages/ocs-0.1.3/utl/utl_sbn_server.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / ocs-0.1.3 / utl / utl_sbn_server.m
diff --git a/octave_packages/ocs-0.1.3/utl/utl_sbn_server.m b/octave_packages/ocs-0.1.3/utl/utl_sbn_server.m
new file mode 100644 (file)
index 0000000..410e081
--- /dev/null
@@ -0,0 +1,96 @@
+## Copyright (C) 2006,2007,2008  Carlo de Falco            
+##
+## This file is part of:
+## OCS - A Circuit Simulator for Octave
+##
+## OCS is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program (see the file LICENSE); if not,
+## see <http://www.gnu.org/licenses/>.
+##
+## author: Carlo de Falco <cdf _AT_ users.sourceforge.net> 
+
+## -*- texinfo -*-
+## @deftypefn{Function File} {} utl_sbn_server(@var{port})
+## Listen for socket connections on port @var{port}, read a command @
+## and return the corresponding output to the socket. 
+## @end deftypefn
+
+function utl_sbn_server (portnum)
+  
+  QUITMESSAGE    = "quit UTLsbnserver";
+  CONFIRMMESSAGE = "confirmed";
+
+  ## CREATE THE SOCKET AND WAIT FOR CONNECTIONS
+  s = socket(AF_INET, SOCK_STREAM, 0);
+  if s < 0
+    error("cannot create socket\n");
+  end
+  
+  if bind(s, portnum) < 0
+    error("bind failed\n");
+  end
+
+  if listen(s, 1) < 0
+    error("listen failed\n");
+  end
+
+  ##MAIN LOOP
+  while 1
+
+    ##ACCEPT CONNECTIONS
+    c = accept(s);
+    if c < 0
+      error("connection error")
+    end
+    
+    ## READ COMMANDS FROM THE SOCKET  
+    msg = readstring (c)
+    
+    ##IF CLIENT SENT SHUTDOWN MESSAGE EXIT
+    if strcmp (msg,QUITMESSAGE)
+      printf("client requested server shutdown, goodbye!\n");
+      disconnect(c); disconnect(s);
+      break
+    end
+    
+    ##EXECUTE COMMANDS FROM THE CLIENT
+    [A,B,C] = eval(msg);
+    
+    ##SEND OUTPUT TO THE CLIENT
+    str = [ sprintf("%17g ",A) "\n" sprintf("%17g ",B)...
+          "\n" sprintf("%17g ",C) "\n"]
+    
+    send(c,str);
+
+    ##END CONNECTION
+    disconnect(c);
+    
+  end
+
+  disconnect(s);
+endfunction
+
+
+function msg = readstring (c)
+  
+  BUFFER_SIZE = 255;
+
+  msg  = '';
+  read = BUFFER_SIZE;
+
+  while read >= BUFFER_SIZE
+    newmsg = char(recv(c, BUFFER_SIZE));
+    read = length(newmsg)
+    msg = [ msg newmsg];
+  end
+
+endfunction