mock_server.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 # Software License Agreement (BSD License)
00003 #
00004 # Copyright (c) 2008, Willow Garage, Inc.
00005 # All rights reserved.
00006 #
00007 # Redistribution and use in source and binary forms, with or without
00008 # modification, are permitted provided that the following conditions
00009 # are met:
00010 #
00011 #  * Redistributions of source code must retain the above copyright
00012 #    notice, this list of conditions and the following disclaimer.
00013 #  * Redistributions in binary form must reproduce the above
00014 #    copyright notice, this list of conditions and the following
00015 #    disclaimer in the documentation and/or other materials provided
00016 #    with the distribution.
00017 #  * Neither the name of Willow Garage, Inc. nor the names of its
00018 #    contributors may be used to endorse or promote products derived
00019 #    from this software without specific prior written permission.
00020 #
00021 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00024 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00025 # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00026 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00027 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00028 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00029 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00030 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00031 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00032 # POSSIBILITY OF SUCH DAMAGE.
00033 #
00034 # Copyright (c) 2008, Willow Garage, Inc.
00035 # Revision $Id$
00036 
00037 import socket
00038 import struct
00039 import yaml
00040 import sys
00041 
00042 def go(config_file):
00043     data = yaml.load(open(config_file))
00044     if 'device' not in data:
00045         raise Exception('no device specified')
00046     dev = data['device']
00047     if type(dev) != dict or not dev.has_key('type'):
00048         raise Exception('parse error on device')
00049     typ = dev['type']
00050     if typ == 'generic_io_socket_server':
00051         if not dev.has_key('host') or not dev.has_key('port'):
00052             raise Exception('parse error on device')
00053         host = dev['host']
00054         port = dev['port']
00055         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
00056         sock.bind((host, port))
00057         sock.listen(1)
00058         while True:
00059             print 'Listening for connection'
00060             conn, addr = sock.accept()
00061             print 'Accepted new connection'
00062             while True:
00063                 length = 1*4+3*4+4*4;
00064                 fmt_str = '<IIIIIIII'
00065                 data = ''
00066                 while len(data) < length:
00067                     new_data = conn.recv(length-len(data))
00068                     if not new_data:
00069                         break
00070                     data += new_data
00071                 if len(data) != length:
00072                     break
00073                 values = struct.unpack(fmt_str, data)
00074                 print 'Received:'
00075                 print values
00076     else:
00077         raise Exception('unsupported device type')
00078 
00079 
00080 USAGE = 'Usage: mock_server.py <config.yaml>'
00081 
00082 if __name__ == '__main__':
00083     if len(sys.argv) != 2:
00084         print(USAGE)
00085         sys.exit(1)
00086     go(sys.argv[1])
00087 


industrial_io_client
Author(s): Brian Gerkey
autogenerated on Mon Oct 6 2014 01:03:41