Learning python 系列2

今天主题是针对statm的目录, 看目录的名称就知道是针对state machine的操作。
__init__.py没有什么内容。
base.py:
定义了一个基类,StateMachineMixin,这个类是为了实现INotificationListener的接口。
同时定义了一个方法:on_notification_received(self,notification),这和INotificationListener的抽象类几乎没有什么区别。

auth.py
class AuthStateMachine是继承于StateMachineMixin,和Modal,Modal类是一个比较奇怪的东西,还没有搞懂。而Modal拥有member,modeAttribute,initialMode.和方法transitionTo()
而AuthStateMachine类除了这些还有以下成员:有__init__(self,device,factory,*args,**kwds)
device: 来自参数device
collaborator:来自factory的方法get_collaborator(device,*args,**kwds)
deffered:来自于与defer.Deffered.
num_sim_errors
num_sim_busy
同时重载隐含的方法:__repr__(self)
这个类还有众多的方法:
notify_auth_ok(self):这里还是和collaborator相关。
notify_auth_failure(self,failure)
______________________
_get_pin_cb(self,pin):把pin设置在self.collaborator.pin中,转到"pin_needed_status"状态,调用do_next().
_get_puk_cb(self,auth):把auth设置在self.collaborator.puk和pin中,转到“puk_needed_status”状态,调用do_next()
_get_puk2_cb(self,auth)这上面相同,只是转入到“puk2_needed_status”状态。
-----------------------
check_pin_cb(self,resp):对于不同的Response,不同的callback.
'READY':直接调用notify_auth_ok().
'SIM PIN':通过self.collaborator.get_pin()取得defer,add callback _get_pin_cb
'SIM PUK':同上,只是add callback _get_puk_cb
'SIM PUK2':同上,只是add callback _get_puk2_cb.

get_pin_status_cb(self,enabled):如果enable为false,同上的ready,如果为true,同上"SIM PIN"
incorrect_pin_eb(self,failure)
incorrect_puk_eb(self,failure)
incorrect_puk2_eb(self,failure)
都是从collaborator.get_XXX的Defer调用add callback(XXX).
puk_required_eb(self,failure)
puk2_required_eb(self,failure)
与上面很相似,不多强调。
sim_failure_eb(self,failure)
当错误出现大于某个数值时,调用,self.notify_auth_failure(),否则,在delay后继续
调用do_next().
sim_busy_eb(self,failure)
这个与上面一个类似,只是判断busy的数目。
sim_no_present_cb(self,failure):调用notify_auth_failure().
这里要注意的是,上面的错误有很多种,CMEErrorSIMXXX(包括,NotInserted,BUSY,Failure)
还有PUKRequired,IncorrectPassword等等。
______________________
start_auth(self):调用,self.do_next,返回self.deferred.
甚至还有一些嵌入式的类,和behavior还是什么很相似的。
class get_pin_status 继承mode:
do_next:d = self.device.sconn.check_pin(),增加callback check_pin_cb和三个
errback:sim_failure_cb,sim_busy_cb,sim_no_present_cb.
class pin_needed_status 继承mode:
do_next:从self.collaborator.pin取得pin,从self.device.sconn.send_pin(pin)返回d,
增加callback:notify_auth_ok()和errback:incorrect_pin_cb,和puk_required_eb.
class puk_needed_status 继承mode:
do_next:一样从collaborator.puk,pin取得auth info,由self.device.sconn.send_puk()
增加callback:notify_auth_ok,和errback:incorrect_puk_eb和puk2_required_eb.
class puk2_needed_status继承mode:
同样,由self.device.sconn.send_puk(auth info)增加callback,和errback:incorrect_puk2_eb,和puk
2_required_eb.
上述每个类都有__enter__,__exit__,这个可能和Modal或者是嵌入式类相关。
这个文件也主要集中在sconn和collaborator.

connection.py文件
她和authStateMachine相似,都是继承于StateMachineMixin,Modal。拥有Modal类的member:
modeAttribute和initialMode。并且重载了__repr__函数。
有私有的成员:
start和dialer,在初始化的时候,dialer来自于__init__(self,dialer)
方法:
connect(self):如果当前的状态是connecting和connected报告异常。defer.fail(ex.AlreadyConnecting)或者是ex.AlreadyConnected.否则转到connecting状态,然后调用
self.do_next().
close(self,hotplug=False)
如果已经在hotplug状态,就抱错,否则转换到disconnected状态,并且do_next().
还有嵌入的类,如下
class disconnected(mode)
do_next:如果hotplug is true,调用self._cleanup(),并且defer.succeed(True)
否则,self.dialer.disconnect().
class connecting(mode)
do_next:调用dialer.connect(),然后增加callback.callback是将状态转到connected.
class connected(mode)
do_next:pass
上述和前面的类似,都有__enter__,__exit__和do_next()
这个文件的操作时对应dialer.

最后是networkreg.py文件,是
class NetworkRegStateMachine和上面的两个类一样,继承StateMachineMixin,Modal
有member,modeAttribute,initialMode.
并且有私有成员:__init__(self,device)
device:来自参数
prefix:
netobj:
cached_roaming_ids:
cID:
deferred
并且重载__repr__.
拥有方法:
on_notification_received(self,notification):
首先调用基类的同名函数,如果self.mode是wait_for_register,并且notification是N.NetworkRegNotification的实例,那么如果notification.args
=1:self.cID.cancel(),进入“obtain_netinfo”状态,并且do_next()
=2: pass
=3:self.cID.cancel(),进入"registration_failed",do_next()
=4:cID.cancel(),进入“registration_failed”,do_next()
=5: cID.cancel(),进入"registration_finished",do_next().
_couldnt_register_with_any_net_cb(self)
同上3,4,只是timerout的原因而已。
_process_netreg_status(self,netregstatus):这里也是个状态的转换
mode,status来自参数netregstatus
=0:进入'wait_to_register',do_next
=1:进入registration_finished,do_next
=2:如果mode=0,self.device.sconn.set_netreg_notification,进入wait_to_register,do_next
=3:进入registration_failed,do_next()
=5:进入registration_failed,do_next.
_process_imsi_cb(self,imsi_prefix)
首先涉及self.prefix=imsi_prefix.后调用,self.device.sconn.set_network_info_format()
在调用self.device.sconn.get_network_info()返回Deffer,添加callback.这个callback也是做
状态的转化。
get_net_names_cb(self,net_objs)
process_roaming_ids(self,net_objs)
start_netreg(self):
有嵌入的class:
class check_registered(mode):
class wait_to_register(mode):
class obtain_netinfo(mode):
class search_operators(mode):
class international_roaming(mode):
class register_with_operator(mode):
class registration_finished(mode):
class registration_failed(mode):
其他的内容这里不再详述,只是可以看出,这里调用了很多sconn的内容。每一个操作似乎都是对应sconn。
另外今天画了一下系列1对象图的关系。明天希望有时间画出今天这个关系图。今天就到此为止

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值