?? regmodel.java
字號(hào):
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{ //處理注冊(cè)、登陸等的算法操作
private boolean ifsave; //是否保存cookies資料
private static RegModel instance;
private RegView regview;
private SocketManager socketmanager = null;
private CommStructNode commstructnode; //通信結(jié)點(diǎn)
private MainGameEvent maingameevent;
private RecordStore recordstore = null; //記錄存儲(chǔ)器
private String version = "00-00";
public RegModel() {
super();
socketmanager = SocketManager.getInstance();
//socketmanager = new SocketManager(true);
maingameevent = new MainGameEvent();
//服務(wù)器ADSL撥號(hào)環(huán)境測(cè)試,datagram://xiezhengyu.dynserv.com表示服務(wù)器域名,也可以以使用公網(wǎng)ip測(cè)試
//http://www.dynserv.com/上可以申請(qǐng)域名,
//socketmanager.init(this,"datagram://xiezhengyu.dynserv.com:5009");
//模擬器本機(jī)測(cè)試環(huán)境
socketmanager.init(this,"datagram://127.0.0.1:5009");
// TODO 自動(dòng)生成構(gòu)造函數(shù)存根
}
public void init(RegView regview){
this.regview = regview;
}
public static synchronized RegModel getInstance(){
if(instance == null){
instance = new RegModel();
}
return instance;
}
//接管socket返回的數(shù)據(jù)
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);
}
//用戶注冊(cè)處理方法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);
}
//處理服務(wù)器對(duì)用戶登錄請(qǐng)求的返回結(jié)果
public void DoLoginResult(MainGameEvent e){
}
// 處理服務(wù)器對(duì)用戶注冊(cè)請(qǐng)求的返回結(jié)果
public void DoRegResult(MainGameEvent e){
}
// 處理服務(wù)器對(duì)用戶資料修改請(qǐng)求的返回結(jié)果
public void DoModifyResult(MainGameEvent e){
}
// 供socketmanager調(diào)用,表示連接線程已經(jīng)啟動(dòng)
public void BeginToConnect(){
regview.handleEvent(UniGameEvent.BEGINTOCONNECT,maingameevent);
}
//供socketmanager調(diào)用,表示接收到數(shù)據(jù)
public void RecvieData(String recpacket) {
// TODO 自動(dòng)生成方法存根
StringTokenizer stringtokenizer = new StringTokenizer(recpacket, UniversalDefine.DIVISION);
String errcode = "";
String serviceid = "";
String operateid = "";
String body = "";
try {
if (stringtokenizer.hasMoreTokens()) {
errcode = stringtokenizer.nextToken(); //取得錯(cuò)誤號(hào)
}
if (stringtokenizer.hasMoreTokens()) {
serviceid = stringtokenizer.nextToken(); //取得業(yè)務(wù)號(hào)
}
if (stringtokenizer.hasMoreTokens()) {
operateid = stringtokenizer.nextToken(); //取得操作碼
}
if (stringtokenizer.hasMoreTokens()) {
body = stringtokenizer.nextToken(); //取得業(yè)務(wù)數(shù)據(jù)
}
if(serviceid.equals(SocketManager.ITORECONNECT)){//與服務(wù)器斷開(kāi)正準(zhǔn)備重連
regview.handleEvent(UniGameEvent.TORECONNECT,maingameevent);
}else if(serviceid.equals(SocketManager.IRECONNECT)){//與服務(wù)器重連成功
regview.handleEvent(UniGameEvent.RECONNECT,maingameevent);
}else if(serviceid.equals(SocketManager.IDISCONNECT)){//無(wú)法重新連接的服務(wù)器
regview.handleEvent(UniGameEvent.DISCONNECT,maingameevent);
}
if ( !serviceid.equals(MudleDefine.UNIVERMUDLE)){ //不是本模塊需要處理的數(shù)據(jù)
return;
}
if ( operateid.equals(UniOperateId.reg) ) { //用戶注冊(cè)響應(yīng)
RegRespond(body);
}else if( operateid.equals(UniOperateId.login ) ){ //用戶登錄響應(yīng)
LoginRespond(body);
}else if( operateid.equals(UniOperateId.modify)){ //用戶資料修改響應(yīng)
ModifyRespond(body);
}else if( operateid.equals(UniOperateId.belogout)){ //用戶被要求強(qiáng)迫注銷
BeLogoutRespond(body);
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 用戶注冊(cè)響應(yīng)
public void RegRespond(String body){
String succflag;
StringTokenizer stringtokenizer = new StringTokenizer(body, ";");
if (stringtokenizer.hasMoreTokens()) {
succflag = stringtokenizer.nextToken(); //取得是否注冊(cè)成功標(biāo)志
if ( succflag.equals("0")){ //用戶注冊(cè)成功
if (stringtokenizer.hasMoreTokens()) {
commstructnode.setUserId(stringtokenizer.nextToken());
maingameevent.setCommNode(commstructnode);
regview.handleEvent(UniGameEvent.REGSUCCESSFUL,maingameevent);
}
}else{ //用戶注冊(cè)失敗
maingameevent.setByName("errinfo","系統(tǒng)忙,請(qǐng)稍后再試");
regview.handleEvent(UniGameEvent.REGFAIL,maingameevent);
}
}
}
// 用戶登錄響應(yīng)
public void LoginRespond(String body){
String succflag="1";
String vflag;
StringTokenizer stringtokenizer = new StringTokenizer(body, ";");
if (stringtokenizer.hasMoreTokens()) {
succflag = stringtokenizer.nextToken(); //取得是否登錄成功標(biāo)志
if ( succflag.compareTo("0")==0){ //用戶登錄成功
if (stringtokenizer.hasMoreTokens()) {
vflag = stringtokenizer.nextToken(); //取得升級(jí)標(biāo)志
if( vflag.compareTo("2") == 0 ){ //必須升級(jí)
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 自動(dòng)生成 catch 塊
e.printStackTrace();
} catch (RecordStoreNotFoundException e) {
// TODO 自動(dòng)生成 catch 塊
e.printStackTrace();
} catch (RecordStoreException e) {
// TODO 自動(dòng)生成 catch 塊
e.printStackTrace();
} catch (IOException e) {
// TODO 自動(dòng)生成 catch 塊
e.printStackTrace();
}
}
maingameevent.setCommNode(commstructnode);
regview.handleEvent(UniGameEvent.LOGINSUCCESSFUL,maingameevent);
}
}
else{ //用戶登錄失敗
maingameevent.setCommNode(commstructnode);
maingameevent.setByName("errinfo","系統(tǒng)忙,請(qǐng)稍后再試");
regview.handleEvent(UniGameEvent.LOGINFAIL,maingameevent);
}
}
}
// 用戶資料修改響應(yīng)
public void ModifyRespond(String body){
String succflag;
StringTokenizer stringtokenizer = new StringTokenizer(body, ";");
if (stringtokenizer.hasMoreTokens()) {
succflag = stringtokenizer.nextToken(); //取得資料修改是否成功標(biāo)志
if ( succflag.equals("0") ){ //資料修改成功
commstructnode.setUserId(stringtokenizer.nextToken());
maingameevent.setCommNode(commstructnode);
regview.handleEvent(UniGameEvent.MODIFYSUCCESSFUL,maingameevent);
}
}else{ //失敗
maingameevent.setByName("errinfo","系統(tǒng)忙,請(qǐng)稍后再試");
regview.handleEvent(UniGameEvent.MODIFYFAIL,maingameevent);
}
}
//用戶被強(qiáng)行注銷
public void BeLogoutRespond(String body){
String reasonstr = "";
StringTokenizer stringtokenizer = new StringTokenizer(body, ";");
if (stringtokenizer.hasMoreTokens()) {
reasonstr = stringtokenizer.nextToken();
}
if(reasonstr.equals("")){
reasonstr = "此帳號(hào)已在別處登陸!";
}
maingameevent.setByName("reasonstr",reasonstr);
regview.handleEvent(UniGameEvent.BELOGOUT,maingameevent);
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -