oculusprimesocket.py
Go to the documentation of this file.
1 # oculusprimesocket.py module
2 # make tcp socket connection with Oculus Prime robot, relay commands and messages
3 
4 """make tcp socket connection with Oculus Prime Server Application
5 provide functions for relay of commands and messages"""
6 
7 import socket, re, time
8 
9 # NETWORK VARIABLE defaults - change to appropriate values
10 host = "127.0.0.1"
11 port = 4444
12 
13 connected = False
14 reconnect = False
15 
16 sock = None
17 sockfileIO = None
18 
19 
20 def sendString(s):
21  """Send single line command to server
22 
23  s -- command to be sent
24  """
25 
26  global connected
27  try:
28  sock.sendall(s+"\r\n")
29  except socket.error:
30  connected = False
31  if reconnect:
33  sendString(s)
34 
35 
36 def waitForReplySearch(pattern):
37  """Read all incoming messages from server, do not return until search match
38 
39  pattern -- regular expression pattern to be searched
40  returns first line containing match, or empty string if server shutdown
41  blocking function
42  """
43 
44  global connected
45  while True:
46  try:
47  servermsg = (sockfileIO.readline()).strip()
48 
49  if re.search("<telnet> shutdown", servermsg, re.IGNORECASE):
50  connected = False
51  if reconnect:
53  waitForReplySearch(pattern)
54  return
55  else:
56  return ""
57 
58  if re.search(pattern, servermsg, re.IGNORECASE):
59  break
60  except socket.error:
61  connected = False
62  return ""
63  return servermsg # return the line containing pattern
64 
65 
67  """Clear socket buffer of all incoming server messages"""
68 
69  sock.setblocking(False)
70  while True:
71  try:
72  sockfileIO.readline()
73  except socket.error: # assuming EOF reached, reading buffer complete
74  break
75 
76  sock.setblocking(True)
77 
78 
79 def replyBufferSearch(pattern):
80  """Search through unread output from server, compare to pattern, return match
81  stops reading buffer if finds a match
82 
83  pattern -- regular expression pattern to be searched
84  returns: first line containing match, or empty string if search fails
85  non blocking function
86  """
87 
88  # global connected
89  result = "" # return empty string if search fails
90  sock.setblocking(False) # don't pause and wait for any further input
91  while True:
92  try:
93  servermsg = (sockfileIO.readline()).strip()
94  if re.search(pattern, servermsg, re.IGNORECASE):
95  result = servermsg # return the line containing pattern
96  break
97  except socket.error: # assuming EOF reached, reading buffer complete
98  break
99  sock.setblocking(True)
100  return result
101 
102 
103 def connect():
104  """Make socket connection to server, blocking
105 
106  returns: True if success, False otherwise
107  """
108  global sockfileIO, connected, sock
109  connected = False
110  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
111  sockfileIO = None
112 
113  try:
114  sock.connect((host, port))
115  except socket.error:
116  connected = False
117  if reconnect:
119  return True
120  else:
121  return False
122  sockfileIO = sock.makefile()
123  waitForReplySearch("^<telnet> Welcome")
124  connected = True
125  return True
126 
127 
129  while not connected:
130  time.sleep(10)
131  connect()
def waitForReplySearch(pattern)
def replyBufferSearch(pattern)


oculusprime
Author(s): Colin Adamson
autogenerated on Wed Mar 10 2021 03:14:59