vector 是线程安全的
在发送数据到服务器的时候,发送数据线程,从共享变量senddatas
中取出要发送的数值并发送到服务器,但是这时候可能有新的数据加入,这时候需要保证数据的线程安全,而arrarylist不是线程安全的。
开启发送线程的原因
数据突发太大,会将还没发送出去的信息覆盖。设置发送数据时间间隔大于30ms才不至于被覆盖。
客户端与服务器数据请求格式json
1、type 数据类型
2、value 数据的值
从客户端请求的数据类型如下
1、登入请求
1 | { |
2、登出请求
1 | { |
3、转发数据请求(更新雷区)
1 | { |
4、游戏结束请求
1 | { |
5、匹配游戏请求
1 | { |
服务器返回数据类型
1、登陆成功
1 | { |
2、登陆失败
1 | { |
责任链产生请求和处理请求说明
1、EvenType.SENDDATA
发送数据的请求
2、EvenType.UPDATE
更新雷区的请求
3、EvenType.LOGIN
登陆游戏请求
4、EvenType.CLICK
鼠标点击雷区请求
MyMouseListener.java 鼠标监听类
产生: 点击雷区之后,产生鼠标点击请求(EvenType.CLICK)
处理: 无
Conection.java 连接服务器类
产生:
1、更新数据请求(EvenType.UPDATE) 这个更新信息是从服务器传送过来的
处理:
1、发送的数据请求(EvenType.SENDDATA)将数据发送到服务器
2、登陆请求(EvenType.LOGIN) 将登陆信息发送到服务器?两者是否能合并?
Core.java 游戏核心类
产生:
1、更新雷区请求(EvenType.UPDATE)经过计算之后需要更新雷区数据
2、游戏结束请求()
处理:
1、鼠标的点击请求(EvenType.CLICK) 调用函数计算该请求导致的结果
MineFile.java 雷区显示类
产生: 发送数据请求(EvenType.SENDDATA),主要是将雷区更新的数据发送到服务器,
处理: 更新雷区的请求(EvenType.UPDATE),根据传过来的数据更新雷区的显示
LoginPanel.java 登陆面板
产生: 登陆游戏请求(EvenType.LOGIN),传递的数据是账号和hash取值后的密码
处理: 无
OperatePanel.java 操作面板
产生: 开始匹配游戏请求
处理: 待定
责任链中数据传输格式
旧版
MineFile.java
###java引用调用和按值调用
对象引用调用,类似于C中的指针。这样可以在B类对象中引入A类对象,这样便可以调用A类对象中的函数,代码如下
1 | package com.test; |
在b中操作a的函数。这样可以在core类中调用Login中的关闭函数
使用implement runable 和继承线程extend Thread 的一些区别
使用实现接口的话,对象调用run函数之后。该对象之后的语句并不会执行,直到run执行完毕。而使用继承的话,线程对象调用,start函数之后。该对象之后的语句可以执行。