Source code for core.Client
#!/usr/bin/env python
"""This file defines the Client Command Meta Description"""
from CMD import CMD
# ClientCommand
# Default Parameter Setting for Client
client_fsm = {
'start_action' : 'request_connect',
'srv_addr':'127.0.0.1',
'srv_port':3333,
'request_timeout':10,
}
[docs]class ClientCMD(CMD):
"""Client Command Meta Description
define the handle of each transition
each CMD should claim the basic function set a node much provide
"""
name = 'client_cmd'
def __init__(self, desc=None):
"""initialization of ClientCMD"""
CMD.__init__(self, desc)
@property
def srv_addr(self): return self.desc['srv_addr']
@property
def srv_port(self): return self.desc['srv_port']
def _is_okay(self, node):
"""check whether this command set is compmatible with the node"""
return True
[docs] def request_connect(self):
"""request a connection to server"""
sock = self.node.create_sock({'type':'server', 'proto':'tcp'})
self.sock = sock
if self.node.NODE_TYPE.startswith('real'):
event = self.node.connect(sock, (self.srv_addr, self.srv_port))
self._trigger(event)
elif self.node.NODE_TYPE.startswith('sim'):
event = self.node.connect(sock, (self.srv_addr, self.srv_port))
[docs] def connection_refused(self):
"""call back when the connection request has been refused
by server"""
self.logger.info("connection_refused, try 2 seconds later")
self.node.sleep(2, self.request_connect)
[docs] def request_time_out(self):
"""call back when the connection request has time out"""
self.logger.info("request_time_out, try 2 seconds later")
self.node.sleep(2, self.request_connect)
[docs] def recv_disconn_req(self, sock):
"""call back when receive the disconnect request from server"""
self.logger.info("recv_disconn_req")
self.node.close_sock(sock)
[docs] def recv_ack(self):
"""call back when receive ack message from server"""
self.logger.info("connection constructed")
print 'connection constructed'
self.node.recv(self.sock, 512, self.dispatcher)
[docs] def echo(self, sock, data):
"""echo the message"""
self.logger.info("receive echo message, [%s]"%(data['msg'][0]))
print '-->', data['msg'][0]
def start(self):
self.request_connect()