fsm 是当前状态+输入=末状态
参数表
Format is INITIAL_STATE: EVENT -> NEW_STATE
CLOSED: APP_PASSIVE_OPEN -> LISTEN
CLOSED: APP_ACTIVE_OPEN -> SYN_SENT
LISTEN: RCV_SYN -> SYN_RCVD
LISTEN: APP_SEND -> SYN_SENT
LISTEN: APP_CLOSE -> CLOSED
SYN_RCVD: APP_CLOSE -> FIN_WAIT_1
SYN_RCVD: RCV_ACK -> ESTABLISHED
SYN_SENT: RCV_SYN -> SYN_RCVD
SYN_SENT: RCV_SYN_ACK -> ESTABLISHED
SYN_SENT: APP_CLOSE -> CLOSED
ESTABLISHED: APP_CLOSE -> FIN_WAIT_1
ESTABLISHED: RCV_FIN -> CLOSE_WAIT
FIN_WAIT_1: RCV_FIN -> CLOSING
FIN_WAIT_1: RCV_FIN_ACK -> TIME_WAIT
FIN_WAIT_1: RCV_ACK -> FIN_WAIT_2
CLOSING: RCV_ACK -> TIME_WAIT
FIN_WAIT_2: RCV_FIN -> TIME_WAIT
TIME_WAIT: APP_TIMEOUT -> CLOSED
CLOSE_WAIT: APP_CLOSE -> LAST_ACK
LAST_ACK: RCV_ACK -> CLOSED
我的处理方案 当前状态+输入=末状态 2个状态一个输入恰好可以构成一个字符串用|连接,刚好组成一个数组,再遍历数组各个元素搜索状态,搜索输入 若匹配则将第3个赋予state
代码如下:
参数表
Format is INITIAL_STATE: EVENT -> NEW_STATE
CLOSED: APP_PASSIVE_OPEN -> LISTEN
CLOSED: APP_ACTIVE_OPEN -> SYN_SENT
LISTEN: RCV_SYN -> SYN_RCVD
LISTEN: APP_SEND -> SYN_SENT
LISTEN: APP_CLOSE -> CLOSED
SYN_RCVD: APP_CLOSE -> FIN_WAIT_1
SYN_RCVD: RCV_ACK -> ESTABLISHED
SYN_SENT: RCV_SYN -> SYN_RCVD
SYN_SENT: RCV_SYN_ACK -> ESTABLISHED
SYN_SENT: APP_CLOSE -> CLOSED
ESTABLISHED: APP_CLOSE -> FIN_WAIT_1
ESTABLISHED: RCV_FIN -> CLOSE_WAIT
FIN_WAIT_1: RCV_FIN -> CLOSING
FIN_WAIT_1: RCV_FIN_ACK -> TIME_WAIT
FIN_WAIT_1: RCV_ACK -> FIN_WAIT_2
CLOSING: RCV_ACK -> TIME_WAIT
FIN_WAIT_2: RCV_FIN -> TIME_WAIT
TIME_WAIT: APP_TIMEOUT -> CLOSED
CLOSE_WAIT: APP_CLOSE -> LAST_ACK
LAST_ACK: RCV_ACK -> CLOSED
我的处理方案 当前状态+输入=末状态 2个状态一个输入恰好可以构成一个字符串用|连接,刚好组成一个数组,再遍历数组各个元素搜索状态,搜索输入 若匹配则将第3个赋予state
代码如下:
var FSMData=[//构建数组 'CLOSED | APP_PASSIVE_OPEN | LISTEN', 'CLOSED | APP_ACTIVE_OPEN |SYN_SENT', 'LISTEN| RCV_SYN | SYN_RCVD', 'LISTEN| APP_SEND | SYN_SENT', 'LISTEN| APP_CLOSE | CLOSED', 'SYN_RCVD| APP_CLOSE | FIN_WAIT_1', 'SYN_RCVD| RCV_ACK | ESTABLISHED', 'SYN_SENT| RCV_SYN | SYN_RCVD', 'SYN_SENT| RCV_SYN_ACK | ESTABLISHED', 'SYN_SENT| APP_CLOSE | CLOSED', 'ESTABLISHED| APP_CLOSE | FIN_WAIT_1', 'ESTABLISHED| RCV_FIN | CLOSE_WAIT', 'FIN_WAIT_1| RCV_FIN | CLOSING', 'FIN_WAIT_1| RCV_FIN_ACK | TIME_WAIT', 'FIN_WAIT_1| RCV_ACK | FIN_WAIT_2', 'CLOSING| RCV_ACK | TIME_WAIT', 'FIN_WAIT_2|RCV_FIN | TIME_WAIT', 'TIME_WAIT|APP_TIMEOUT | CLOSED', 'CLOSE_WAIT| APP_CLOSE | LAST_ACK', 'LAST_ACK| RCV_ACK | CLOSED'] function traverseTCPStates(eventList){ var state = "CLOSED"; // initial state, always for(var i=0;i<eventList.length;i++) { if(! judge (eventList[i]) ) return state; //若返回false,不再进行,返回 } return state;//最终返回 function judge(_eventListPara){ //判断该输入是否有匹配,有的话更改state,返回//true,无返回false 更改state为error for(var j=0; j<FSMData.length; j++) { FSMData [j]=FSMData [j].replace(/\s+/g,'');//去空格因为数组不会自动去空格 var arr=FSMData [j].split("|");//剥离三个东东 if(arr[0]==state && arr[1]==_eventListPara) { state= arr[2]; return true; } } state ='ERROR'; return false; } }
发表评论
-
vue
2017-06-03 19:41 0比如 假如没有添加上响应式属性的话,那么就会出现b只是一个简 ... -
自动配置代理
2017-02-13 15:42 1689有些时候 手机或者pc上面需要频繁的切换代理与取消代理,感觉切 ... -
对话框回调
2017-01-11 10:26 885今天遇见一个需求 在提交数据时需要同时弹出3个确认菜单,点击了 ... -
svg, 支持mouseover
2017-01-09 18:07 1084今天项目中的需求,是在一个fill后的svg path上面加上 ... -
vue 生命周期钩子
2017-01-07 22:11 1711和生命一样,vue组件创 ... -
vue,vue-router,vux,综合
2017-01-04 17:36 956实例化vue实例时初始化router store 状态管理。触 ... -
分享vue脚手架工具,vue-cli
2017-01-04 15:42 788脚手架渲染原理: 下面 ... -
平时chrome调试遇见的 浏览器优化
2017-01-04 11:23 501js基础:在一个事件处理器(click)会形成一个闭包,可以访 ... -
百度文库复制方法
2015-11-11 10:24 1180即时对象初始化方法 (function(){ //cod ... -
js array对象的迭代方法
2015-07-16 12:09 693所有方法都接受两个参数:(fn,ctx); 默认的函数里面ct ... -
qq空间刷评论工具
2015-06-25 17:48 902var a=document.getElementsB ... -
jquery内部链式调用机理
2015-06-07 21:17 1110只需要在调用该对象合适(比如下列的setStyles)的方法后 ... -
this问题 js
2015-06-07 21:08 477任何一个函数都可以被当做构造函数使用!并且new了之后一定是返 ... -
js delete 删除机理以及它的内存泄露问题的解决方案
2015-06-02 12:43 935delete删除属性时只是解除了属性与对象的绑定,故当属性值为 ... -
浮动布局
2015-05-13 17:27 0c由于其宽度略大于右边的空格,故不会飘到右边去,会被卡住 恰好 ... -
zoom.js
2015-05-12 19:01 728它的基于bootstrap 的https://raw.gith ... -
jquery-avgrund
2015-05-12 12:31 0先引入这些文件 <link r ... -
workmark
2015-05-10 18:07 495在一个容器当中 指定 ... -
jquery
2015-05-09 16:33 0$(document).ready(function(){ ... -
豆瓣电影首页的分析
2015-05-08 22:48 862网址http://movie.douban.com 1 先上 ...
相关推荐
- **单元测试:** 如何编写 Actor 的单元测试。 - **集成测试:** 如何测试 Actor 系统的整体行为。 #### 四、带有 Lambda 支持的 Actors **4.1 带有 Lambda 支持的 Actors** - **Lambda 表达式:** 使用 Lambda ...
游戏脚本高级编程是游戏开发领域中的一个重要环节,它涉及到如何使用特定的编程语言和工具来创建、管理和优化游戏逻辑。在这个压缩包“游戏脚本高级编程附带资料.7z”中,我们可以期待找到一系列关于游戏脚本的深度...
- **Actors (Java with Lambda Support)**:Java版的Actor支持lambda表达式,简化了代码编写。 - **FSM (Java with Lambda Support)**:有限状态机是控制复杂逻辑的一种有效方式,Java版本同样支持lambda表达式。 #...
这部分内容进一步探讨了如何在 Java 中使用 Lambda 表达式来简化 Actor 的定义和消息处理逻辑。 ##### 9.4 FSM (Java with Lambda Support) 这部分内容介绍了如何在 Java 中使用 Lambda 表达式来简化有限状态机 ...
- **状态机模式**:使用 FSM 模式简化 Actor 的逻辑。 - **事件处理**:定义不同状态下对消息的响应。 ##### 3.8 持久化 - **持久化机制**:记录 Actor 的状态更改。 - **恢复状态**:从日志中恢复 Actor 的历史...