📄 regmodel.java
字号:
package com.tianxia.qipai.model.universal;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotFoundException;
import com.tianxia.qipai.event.MainGameEvent;
import com.tianxia.qipai.model.socket.SocketInterface;
import com.tianxia.qipai.model.socket.SocketManager;
import com.tianxia.qipai.model.util.CommStructNode;
import com.tianxia.qipai.model.util.MudleDefine;
import com.tianxia.qipai.model.util.StringTokenizer;
import com.tianxia.qipai.view.universal.RegView;
import com.tianxia.qipai.event.UniGameEvent;
import com.tianxia.qipai.model.util.*;
public class RegModel implements SocketInterface{ //处理注册、登陆等的算法操作
private boolean ifsave; //是否保存cookies资料
private static RegModel instance;
private RegView regview;
private SocketManager socketmanager = null;
private CommStructNode commstructnode; //通信结点
private MainGameEvent maingameevent;
private RecordStore recordstore = null; //记录存储器
private String version = "00-00";
public RegModel() {
super();
socketmanager = SocketManager.getInstance();
//socketmanager = new SocketManager(true);
maingameevent = new MainGameEvent();
//服务器ADSL拨号环境测试,datagram://xiezhengyu.dynserv.com表示服务器域名,也可以以使用公网ip测试
//http://www.dynserv.com/上可以申请域名,
//socketmanager.init(this,"datagram://xiezhengyu.dynserv.com:5009");
//模拟器本机测试环境
socketmanager.init(this,"datagram://127.0.0.1:5009");
// TODO 自动生成构造函数存根
}
public void init(RegView regview){
this.regview = regview;
}
public static synchronized RegModel getInstance(){
if(instance == null){
instance = new RegModel();
}
return instance;
}
//接管socket返回的数据
public void ToReciveSocketData(){
socketmanager.resetSocInterface(this);
}
//游戏退出
public void DoGameExit(CommStructNode commstructnode){
this.commstructnode = commstructnode;
StringBuffer packstring = new StringBuffer();
packstring.append("000");
packstring.append(UniversalDefine.DIVISION);
packstring.append(MudleDefine.UNIVERMUDLE);
packstring.append(UniversalDefine.DIVISION);
packstring.append(UniOperateId.beexit);
packstring.append(UniversalDefine.DIVISION);
packstring.append(commstructnode.getUserId());
packstring.append(UniversalDefine.SUBDIVISION);
packstring.append(commstructnode.getPhonenum());
socketmanager.sendpacket(packstring.toString(),false);
}
//登录处理方法 操作码为001
public void DoLogin(CommStructNode commstructnode,boolean ifsave){
this.commstructnode = commstructnode;
this.ifsave = ifsave;
StringBuffer packstring = new StringBuffer();
packstring.append("000");
packstring.append(UniversalDefine.DIVISION);
packstring.append(MudleDefine.UNIVERMUDLE);
packstring.append(UniversalDefine.DIVISION);
packstring.append(UniOperateId.login );
packstring.append(UniversalDefine.DIVISION);
packstring.append(commstructnode.getUserId());
packstring.append(UniversalDefine.SUBDIVISION);
packstring.append(commstructnode.getPassWord());
packstring.append(UniversalDefine.SUBDIVISION);
packstring.append(version);
socketmanager.sendpacket(packstring.toString(),true);
}
//用户注册处理方法000
public void DoReg(CommStructNode commstructnode){
this.commstructnode = commstructnode;
StringBuffer packstring = new StringBuffer();
packstring.append("000");
packstring.append(UniversalDefine.DIVISION);
packstring.append(MudleDefine.UNIVERMUDLE);
packstring.append(UniversalDefine.DIVISION);
packstring.append(UniOperateId.reg );
packstring.append(UniversalDefine.DIVISION);
packstring.append(commstructnode.getNickName());
packstring.append(UniversalDefine.SUBDIVISION);
packstring.append(commstructnode.getPhonenum());
packstring.append(UniversalDefine.SUBDIVISION);
packstring.append(commstructnode.getPassWord());
packstring.append(UniversalDefine.SUBDIVISION);
packstring.append(commstructnode.getPicture());
packstring.append(UniversalDefine.SUBDIVISION);
packstring.append(commstructnode.getSex());
packstring.append(UniversalDefine.SUBDIVISION);
packstring.append(commstructnode.getAge());
packstring.append(UniversalDefine.SUBDIVISION);
packstring.append(commstructnode.getUserType());
socketmanager.sendpacket(packstring.toString(),true);
}
//用户资料修改处理方法
public void DoModify(CommStructNode commstructnode){
this.commstructnode = commstructnode;
StringBuffer packstring = new StringBuffer();
packstring.append("000");
packstring.append(UniversalDefine.DIVISION);
packstring.append(MudleDefine.UNIVERMUDLE);
packstring.append(UniversalDefine.DIVISION);
packstring.append(UniOperateId.modify );
packstring.append(UniversalDefine.DIVISION);
packstring.append(commstructnode.getUserId());
packstring.append(UniversalDefine.SUBDIVISION);
packstring.append(commstructnode.getNickName());
packstring.append(UniversalDefine.SUBDIVISION);
packstring.append(commstructnode.getPhonenum());
packstring.append(UniversalDefine.SUBDIVISION);
packstring.append(commstructnode.getPassWord());
packstring.append(UniversalDefine.SUBDIVISION);
packstring.append(commstructnode.getPicture());
packstring.append(UniversalDefine.SUBDIVISION);
packstring.append(commstructnode.getSex());
packstring.append(UniversalDefine.SUBDIVISION);
packstring.append(commstructnode.getAge());
packstring.append(UniversalDefine.SUBDIVISION);
packstring.append(commstructnode.getUserType());
socketmanager.sendpacket(packstring.toString(),true);
}
//处理服务器对用户登录请求的返回结果
public void DoLoginResult(MainGameEvent e){
}
// 处理服务器对用户注册请求的返回结果
public void DoRegResult(MainGameEvent e){
}
// 处理服务器对用户资料修改请求的返回结果
public void DoModifyResult(MainGameEvent e){
}
// 供socketmanager调用,表示连接线程已经启动
public void BeginToConnect(){
regview.handleEvent(UniGameEvent.BEGINTOCONNECT,maingameevent);
}
//供socketmanager调用,表示接收到数据
public void RecvieData(String recpacket) {
// TODO 自动生成方法存根
StringTokenizer stringtokenizer = new StringTokenizer(recpacket, UniversalDefine.DIVISION);
String errcode = "";
String serviceid = "";
String operateid = "";
String body = "";
try {
if (stringtokenizer.hasMoreTokens()) {
errcode = stringtokenizer.nextToken(); //取得错误号
}
if (stringtokenizer.hasMoreTokens()) {
serviceid = stringtokenizer.nextToken(); //取得业务号
}
if (stringtokenizer.hasMoreTokens()) {
operateid = stringtokenizer.nextToken(); //取得操作码
}
if (stringtokenizer.hasMoreTokens()) {
body = stringtokenizer.nextToken(); //取得业务数据
}
if(serviceid.equals(SocketManager.ITORECONNECT)){//与服务器断开正准备重连
regview.handleEvent(UniGameEvent.TORECONNECT,maingameevent);
}else if(serviceid.equals(SocketManager.IRECONNECT)){//与服务器重连成功
regview.handleEvent(UniGameEvent.RECONNECT,maingameevent);
}else if(serviceid.equals(SocketManager.IDISCONNECT)){//无法重新连接的服务器
regview.handleEvent(UniGameEvent.DISCONNECT,maingameevent);
}
if ( !serviceid.equals(MudleDefine.UNIVERMUDLE)){ //不是本模块需要处理的数据
return;
}
if ( operateid.equals(UniOperateId.reg) ) { //用户注册响应
RegRespond(body);
}else if( operateid.equals(UniOperateId.login ) ){ //用户登录响应
LoginRespond(body);
}else if( operateid.equals(UniOperateId.modify)){ //用户资料修改响应
ModifyRespond(body);
}else if( operateid.equals(UniOperateId.belogout)){ //用户被要求强迫注销
BeLogoutRespond(body);
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 用户注册响应
public void RegRespond(String body){
String succflag;
StringTokenizer stringtokenizer = new StringTokenizer(body, ";");
if (stringtokenizer.hasMoreTokens()) {
succflag = stringtokenizer.nextToken(); //取得是否注册成功标志
if ( succflag.equals("0")){ //用户注册成功
if (stringtokenizer.hasMoreTokens()) {
commstructnode.setUserId(stringtokenizer.nextToken());
maingameevent.setCommNode(commstructnode);
regview.handleEvent(UniGameEvent.REGSUCCESSFUL,maingameevent);
}
}else{ //用户注册失败
maingameevent.setByName("errinfo","系统忙,请稍后再试");
regview.handleEvent(UniGameEvent.REGFAIL,maingameevent);
}
}
}
// 用户登录响应
public void LoginRespond(String body){
String succflag="1";
String vflag;
StringTokenizer stringtokenizer = new StringTokenizer(body, ";");
if (stringtokenizer.hasMoreTokens()) {
succflag = stringtokenizer.nextToken(); //取得是否登录成功标志
if ( succflag.compareTo("0")==0){ //用户登录成功
if (stringtokenizer.hasMoreTokens()) {
vflag = stringtokenizer.nextToken(); //取得升级标志
if( vflag.compareTo("2") == 0 ){ //必须升级
regview.handleEvent(UniGameEvent.NEEDUPGRADE,maingameevent);
}
else{
if (stringtokenizer.hasMoreTokens()) { //取昵称
commstructnode.setNickName(stringtokenizer.nextToken());
}
if (stringtokenizer.hasMoreTokens()) { //取头像
commstructnode.setPicture(stringtokenizer.nextToken());
}
if (stringtokenizer.hasMoreTokens()) { //取性别
commstructnode.setSex(Integer.parseInt(stringtokenizer.nextToken()));
}
if (stringtokenizer.hasMoreTokens()) { //取用户类型
commstructnode.setUserType(Integer.parseInt(stringtokenizer.nextToken()));
}
if (stringtokenizer.hasMoreTokens()) { //取年龄
commstructnode.setAge(Integer.parseInt(stringtokenizer.nextToken()));
}
if (stringtokenizer.hasMoreTokens()) { //取游戏币
commstructnode.setGameMoney(stringtokenizer.nextToken());
}
}
if(ifsave){ //保存cookies
try {
if(recordstore == null){
recordstore = RecordStore.openRecordStore("userdata",true);
}
ByteArrayOutputStream outputstream = new ByteArrayOutputStream();
DataOutputStream outputdatastream = new DataOutputStream(outputstream);
outputdatastream.writeUTF(commstructnode.getUserId());
outputdatastream.writeUTF(commstructnode.getPassWord());
outputdatastream.flush();
byte [] outputrecord = outputstream.toByteArray();
if(recordstore.getNumRecords() == 0){
recordstore.addRecord(outputrecord,0,outputrecord.length);
}
else{
recordstore.setRecord(1,outputrecord,0,outputrecord.length); //第一条记录为用户的用户名和密码
}
} catch (RecordStoreFullException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (RecordStoreNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (RecordStoreException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
maingameevent.setCommNode(commstructnode);
regview.handleEvent(UniGameEvent.LOGINSUCCESSFUL,maingameevent);
}
}
else{ //用户登录失败
maingameevent.setCommNode(commstructnode);
maingameevent.setByName("errinfo","系统忙,请稍后再试");
regview.handleEvent(UniGameEvent.LOGINFAIL,maingameevent);
}
}
}
// 用户资料修改响应
public void ModifyRespond(String body){
String succflag;
StringTokenizer stringtokenizer = new StringTokenizer(body, ";");
if (stringtokenizer.hasMoreTokens()) {
succflag = stringtokenizer.nextToken(); //取得资料修改是否成功标志
if ( succflag.equals("0") ){ //资料修改成功
commstructnode.setUserId(stringtokenizer.nextToken());
maingameevent.setCommNode(commstructnode);
regview.handleEvent(UniGameEvent.MODIFYSUCCESSFUL,maingameevent);
}
}else{ //失败
maingameevent.setByName("errinfo","系统忙,请稍后再试");
regview.handleEvent(UniGameEvent.MODIFYFAIL,maingameevent);
}
}
//用户被强行注销
public void BeLogoutRespond(String body){
String reasonstr = "";
StringTokenizer stringtokenizer = new StringTokenizer(body, ";");
if (stringtokenizer.hasMoreTokens()) {
reasonstr = stringtokenizer.nextToken();
}
if(reasonstr.equals("")){
reasonstr = "此帐号已在别处登陆!";
}
maingameevent.setByName("reasonstr",reasonstr);
regview.handleEvent(UniGameEvent.BELOGOUT,maingameevent);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -