手头上没有合适的例子。只能说明一下。
首先,按你的要求,服务器的状态应该分为:
1、未连接
2、正在连接
3、发命令
4、收到发命令回复
5、发断开命令
6、收到断开命令回复
7、正在断开
8、已断开
9、操作错误
10、各步的错误,这里就不列了。
初始化时,每个服务器状态初始化为 1
定时器检索到 当前连接为 空。
取服务器状态,如果这里第一个服务器的状态是1,那么保存这第一个服务器的序号。后面都需要使用到这个序号
那么定时器就 连接第一个服务器, 状态置 2,同时超时计数开始。
当服务器连上后,有一个事件,里面就发送命令,同时置状态为 3 ,超时计数复位。重试计数复位。
收到数据后,有一个事件,判断事件,确认是否成功,如果不成功,重发命令,超时计数复位。入重初计数+1。
判断状态,如果状态为 3,并且重试计数超过,置 状态为 9。 关闭连接。
判断事件成功,状态为 3 ,置状态为 4 。然后发断开命令置状态为 5
状态为 5
,置状态 6,然后关闭连接,置状态为7
连接断开成功,置状态为 8 ,这个可以由定时器里扫描。
定时器超时计数超时,根据状态,3 ,重发命令,重试计数+1,5,重发断开命令,重试计数+1.
如果重试计数超过,置状态 9 ,关闭连接。
如果没有命令返回怎么办?
那就在定时器里判断状态,
如 状态为3,那么就发送关闭连接命令,置状态为7
----------------------------------------------
原则:有事件的,在事件里处理,没有事件的,通过定时器能检测到的,就在定时器里处理。
每次处理后,都修改状态。
定时器,除下超时外,每次都要检测 连接情况和当前服务器操作的状态。以便采取相应的处理方式。