oculusprimesocket.py
Go to the documentation of this file.
00001 # oculusprimesocket.py module
00002 # make tcp socket connection with Oculus Prime robot, relay commands and messages 
00003 
00004 """make tcp socket connection with Oculus Prime Server Application
00005 provide functions for relay of commands and messages"""
00006 
00007 import socket, re, time
00008 
00009 # NETWORK VARIABLE defaults - change to appropriate values
00010 host = "127.0.0.1"
00011 port = 4444
00012 
00013 connected = False
00014 reconnect = False
00015 
00016 sock = None
00017 sockfileIO = None
00018 
00019 
00020 def sendString(s):
00021         """Send single line command to server
00022         
00023         s -- command to be sent
00024         """
00025 
00026         global connected
00027         try:
00028                 sock.sendall(s+"\r\n")
00029         except socket.error: 
00030                 connected = False
00031                 if reconnect:
00032                         waitForConnect()
00033                         sendString(s)
00034 
00035 
00036 def waitForReplySearch(pattern):
00037         """Read all incoming messages from server, do not return until search match 
00038         
00039         pattern -- regular expression pattern to be searched
00040         returns first line containing match, or empty string if server shutdown
00041         blocking function
00042         """
00043         
00044         global connected
00045         while True:
00046                 try:
00047                         servermsg = (sockfileIO.readline()).strip()
00048 
00049                         if re.search("<telnet> shutdown", servermsg, re.IGNORECASE):
00050                                 connected = False
00051                                 if reconnect:
00052                                         waitForConnect()
00053                                         waitForReplySearch(pattern)
00054                                         return
00055                                 else:
00056                                         return ""               
00057                                         
00058                         if re.search(pattern, servermsg, re.IGNORECASE): 
00059                                 break
00060                 except socket.error: 
00061                         connected = False
00062                         return ""
00063         return servermsg # return the line containing pattern
00064 
00065 
00066 def clearIncoming():
00067         """Clear socket buffer of all incoming server messages"""
00068 
00069         sock.setblocking(False)
00070         while True:
00071                 try:
00072                         sockfileIO.readline()
00073                 except socket.error: # assuming EOF reached, reading buffer complete
00074                         break
00075                         
00076         sock.setblocking(True)
00077                         
00078                         
00079 def replyBufferSearch(pattern): 
00080         """Search through unread output from server, compare to pattern, return match
00081         stops reading buffer if finds a match
00082         
00083         pattern -- regular expression pattern to be searched
00084         returns: first line containing match, or empty string if search fails
00085         non blocking function
00086         """
00087         
00088         # global connected
00089         result = "" # return empty string if search fails
00090         sock.setblocking(False) # don't pause and wait for any further input
00091         while True:
00092                 try:
00093                         servermsg = (sockfileIO.readline()).strip()
00094                         if re.search(pattern, servermsg, re.IGNORECASE): 
00095                                 result = servermsg # return the line containing pattern
00096                                 break
00097                 except socket.error: # assuming EOF reached, reading buffer complete
00098                         break
00099         sock.setblocking(True)
00100         return result  
00101 
00102 
00103 def connect():
00104         """Make socket connection to server, blocking
00105         
00106         returns: True if success, False otherwise
00107         """
00108         global sockfileIO, connected, sock
00109         connected = False
00110         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
00111         sockfileIO = None
00112         
00113         try:
00114                 sock.connect((host, port))
00115         except socket.error:
00116                 connected = False
00117                 if reconnect:
00118                         waitForConnect()
00119                         return True
00120                 else: 
00121                         return False
00122         sockfileIO = sock.makefile()
00123         waitForReplySearch("^<telnet> Welcome")
00124         connected = True
00125         return True
00126         
00127         
00128 def waitForConnect():
00129         while not connected:
00130                 time.sleep(10)
00131                 connect()


oculusprime
Author(s): Colin Adamson
autogenerated on Sat Jun 8 2019 20:04:29