当匹配人数大于2时,调用start()函数,这时相当于新开了一个线程,处于就绪状态,一旦得到CPU时间片,开始执行run()方法。
无需等待run()方法执行完毕就可以执行start()函数下面的内容。
WebSocketServer
类:
- 接受前端发来的消息(start-matching,stop-matching,move),进行路由。
- 给前端发送消息,比如对手的名字,头像,游戏的信息(两个玩家的id,位置,生成的地图)。
Game
类:
- 设置两个玩家的方向(前端发来的方向)并记录,生成地图数组g。
- 新开一个线程来获取两个玩家的下一步输入,如果有输入,判断输入是否合法,合法:向两个玩家发送移动信息(后端往前端发送);不合法:向两个玩家发送结果信息。
- 将玩家对局信息存放到数据库中
setRestTemplate
方法上加了Autowired
原理是看一下我们定义的变量是否有唯一的加了@Bean
注解的函数,如果有的话,调用该函数,把函数的返回值赋值给当前变量。
当开始匹配时,websocket
端会将玩家的id和rating通过restTemple
发送给matchingsystem
,matchingsystem的controller接受到消息后,会将玩家的id和rating添加到待匹配的玩家列表中,线程每过一秒尝试匹配所有的玩家,匹配成功后会将两个玩家的id通过restTemple
发送给backend,之后backend会调用startGame函数来开始游戏,即将两个玩家的信息传给前端,前端进行渲染,并且获取两条蛇的下一步输入。