📄 roomlist.java
字号:
package com.tianxia.qipai.view.game.gobang;
import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.Spacer;
import javax.microedition.lcdui.Ticker;
import com.tianxia.qipai.control.game.gobang.GobangControl;
import com.tianxia.qipai.event.*;
import com.tianxia.qipai.model.game.gobang.GobangDeal;
import com.tianxia.qipai.model.game.gobang.GobangTimer;
import com.tianxia.qipai.model.game.gobang.RoomStruct;
import com.tianxia.qipai.model.game.gobang.TimeAdd;
import com.tianxia.qipai.model.util.GameEventDeal;
public class RoomList implements CommandListener,GameEventDeal,TimeAdd {
private GobangControl gobangcontrol;
private Display display;
private List roomlist;
private MainGameEvent maingameevent; //事件内容
private Form conprompt; //提示界面
//private CommStructNode commstructnode = null; //通信结点
private GobangDeal gobangdeal;
private boolean listflag=true; //是否要刷新游戏列表
private boolean counterflag = false; //是否获得用户的游戏统计数据
private final int roomcount = 5;
private RoomStruct roomstruct[] = new RoomStruct[roomcount];
private static RoomList instance = null;
private int currcount = 0;
// private boolean reconnectflag; //服务器重连标志
private boolean reflashflag;
private final static Command CMD_BACK = new Command("返回", Command.BACK, 1);
private final static Command CMD_AFFIRM = new Command("确认", Command.OK, 1);
private GobangTimer gobangtimer;
public RoomList() {
super();
// reconnectflag = false;
reflashflag = false;
counterflag = false;
gobangcontrol = null;
}
public void init(GobangControl gobangcontrol){
this.gobangcontrol = gobangcontrol;
currcount=30;
display = gobangcontrol.getDisplay();
gobangdeal = GobangDeal.getInstance();
maingameevent = gobangcontrol.getMainGameEvent();
gobangdeal.init(maingameevent);
gobangdeal.setEventDeal(this);
// for(int i=0;i<roomcount;i++){
// roomstruct[i] = new RoomStruct();
//}
ConPromptFormInit();
display.setCurrent(conprompt);
conprompt = null;
gobangcontrol.rt.gc();
BeginThead();
}
public void BeginThead(){
if(gobangtimer != null){
gobangtimer.ToExit();
gobangtimer = null;
}
gobangtimer = new GobangTimer(this);
gobangtimer.start();
}
public static synchronized RoomList getInstance(){
if(instance == null){
instance = new RoomList();
}
return instance;
}
public Display getDiplay(){
return this.display;
}
public void setListFlag(boolean listflag){
this.listflag = listflag;
}
// 正在连接服务器提示界面
private void ConPromptFormInit(){
if(conprompt != null)
conprompt = null;
conprompt = new Form("连接服务器");
//conprompt.deleteAll();
conprompt.setTitle("正连接服务器");
String temp = "正连接服务器,请稍等!";
conprompt.setTicker(new Ticker(temp));
conprompt.append(new Spacer(2,10));
}
//正在重新连接服务器提示界面
private void ReConPromptFormInit(){
if(conprompt != null)
conprompt = null;
conprompt = new Form("连接服务器");
conprompt.setTitle("重新连接服务器");
String temp = "正重新连接服务器,请稍等!";
conprompt.setTicker(null);
conprompt.setTicker(new Ticker(temp));
conprompt.append(new Spacer(2,10));
conprompt.append("您已经断线,现在正在重新连接服务器,请稍等");
}
//无法连接服务器提示界面
private void DisConPromptInit(){
Form connectfailform = new Form("与服务器断开");
connectfailform.append("无法重新连接服务器,请稍后重新登陆!");
connectfailform.addCommand(CMD_AFFIRM);
connectfailform.setCommandListener(this);
display.setCurrent(connectfailform);
connectfailform=null;
}
public void RoomListDisplay(){
String temp;
if(listflag){
if(roomlist ==null){
String[] stringArray = {};
Image[] imageArray = null;
roomlist =new List("游戏列表", Choice.IMPLICIT,stringArray,imageArray);
roomlist.addCommand(CMD_BACK);
roomlist.setCommandListener(this);
}
roomlist.deleteAll();
for(int i = 0 ; i < roomcount ; i ++){
temp ="房间"+ roomstruct[i].roomnum + "(" + roomstruct[i].onlinenum
+ "/" + roomstruct[i].capacity + ")";
roomlist.append(temp,null);
}
roomlist.addCommand(CMD_BACK);
roomlist.setCommandListener(this);
display.setCurrent(roomlist);
}
}
//正在进入房间界面
public void EnteringRoom(){
if(conprompt != null)
conprompt = null;
conprompt = new Form("连接服务器");
conprompt.setTitle("正登录房间");
String temp = "正登录房间,请稍等!";
conprompt.setTicker(new Ticker(temp));
conprompt.append(new Spacer(2,10));
conprompt.append("nkkkkk");
listflag = false;
}
public void commandAction(Command cmd, Displayable arg1) {
// TODO 自动生成方法存根
if(cmd == CMD_AFFIRM){
gobangcontrol.handleEvent(MainGameEvent.MAINGAMEEXIT,maingameevent);
}else if(cmd==CMD_BACK){
gobangcontrol.handleEvent(GobangEvent.GOBANGEXIT,maingameevent);
}
else if(cmd==List.SELECT_COMMAND){
int i = roomlist.getSelectedIndex();
maingameevent.setByName("roomnum",String.valueOf(roomstruct[i].roomnum));
maingameevent.setByName("capacity",String.valueOf(roomstruct[i].capacity));
maingameevent.setByName("onlinenum",String.valueOf(roomstruct[i].onlinenum));
maingameevent.setByName("tablecount",String.valueOf(roomstruct[i].GetTableCount()));
maingameevent.getCommNode().setRoomId(String.valueOf(roomstruct[i].roomnum));
EnteringRoom();
display.setCurrent(conprompt);
conprompt = null;
gobangcontrol.rt.gc();
if(!counterflag) //还未取得过用户的统计数据
gobangdeal.enterRoom(maingameevent.getCommNode());
else //已经用户的游戏统计数据
gobangcontrol.handleEvent(GobangEvent.USERCOUNTRECEIVE,maingameevent);
}
}
public void handleEvent(int eventID, MainGameEvent e) {
this.maingameevent = e;
switch(eventID){
case GobangEvent.ROOMINFOMODIFY:
case GobangEvent.ROOMINFORECEIVE: //取得房间列表信息
reflashflag = true;
roomstruct = gobangdeal.getRoomInfo();
RoomListDisplay();
BeginThead();
break;
case GobangEvent.USERCOUNTRECEIVE: //获取大厅信息
counterflag = true;
reflashflag = false;
if(gobangtimer != null){
gobangtimer.ToExit();
gobangtimer = null;
}
maingameevent = null;
roomstruct = null;
gobangcontrol.rt.gc();
System.out.println("freeMoryroomlist: "+String.valueOf(gobangcontrol.rt.freeMemory()));
gobangcontrol.handleEvent(GobangEvent.USERCOUNTRECEIVE,e);
break;
case GobangEvent.EXITROOMRESPOND:
listflag = true;
roomstruct = gobangdeal.getRoomInfo();
RoomListDisplay();
gobangdeal.getRoomList(maingameevent.getCommNode());
break;
case GobangEvent.TORECONNECT: //正在重新连接服务器
reflashflag = false;
ReConPromptFormInit();
display.setCurrent(conprompt);
conprompt = null;
gobangcontrol.rt.gc();
break;
case GobangEvent.RECONNECT: //重连服务器成功
reflashflag = true;
break;
case GobangEvent.DISCONNECT: //无法连接服务器
DisConPromptInit();
break;
default:
break;
}
// TODO 自动生成方法存根
}
public void addSec() { //定时调用函数,设为一秒
// TODO 自动生成方法存根
currcount++;
if(currcount%10==0&&reflashflag){ //每10秒刷新一次屏幕
roomstruct = gobangdeal.getRoomInfo(); //获取房间信息
RoomListDisplay();
}
if(currcount%30==0){ //每30秒发送一个在线检测包
if(maingameevent!=null)
gobangdeal.setCheckFlag(maingameevent.getCommNode().getUserId());
currcount=0;
}
//System.out.println("*********************roomlist");
}
public void setNull(){
if(gobangtimer!=null){
gobangtimer.ToExit();
gobangtimer = null;
}
gobangcontrol = null;
display = null;
roomlist=null;
if(maingameevent != null){
gobangdeal.ExitGame(maingameevent.getCommNode().getUserId());
}
conprompt=null; //提示界面
gobangdeal.setNull();
gobangdeal = null;
roomstruct=null;
instance = null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -