?? mqthread.java
字號:
package com.face;
import com.mq.MQOperator;
import java.util.*;
public class MQThread extends Thread {
//Define const for call function
public static final int IDLE = 0;
public static final int WAITRETURN = -1;
public static final int PUT_MESSAGE = 1;
public static final int GET_MESSAGE = 2;
public static final int CONN_QMANAGER = 3;
public static final int LIST_QUEUE = 4;
private IMQDisplay mywindow; //Display message interface class
private int runflag = 0; //函數是否運行的標志
// Should be locked!
private String MQI_NAME; //MQI的名稱
private int completion_code; //完成碼
private int reason_code; //原因碼
private String return_message; //返回信息
private boolean suspendFlag; //線程是否運行的標志
private String[] queue;
private String QM_NAME; //隊列管理器名稱
private String Q_NAME; //隊列名稱
private String outMessage; //要發送的消息
private String inMessage = null; //讀取的消息
private MQOperator mqOp;
/**
* 構造函數
*/
public MQThread() {
this.suspendFlag = false;
}
/**
* 構造函數
*/
public MQThread(IMQDisplay listener) {
this.mywindow = listener;
this.suspendFlag = false;
runflag = IDLE;
}
/**
* 設置運行標志位
* @param flag 運行標志位
* @return boolean
*/
public synchronized boolean setrunflag(int flag) {
/*如果線程還在運行,則等待,不能做任何工作*/
if(runflag != IDLE) {
return false;
}
runflag = flag;
return true;
}
/**
* 獲取運行標志位
* @return int
*/
public int getrunflag() {
return runflag;
}
/**
* 設置隊列管理器的名稱
* @param QMgrName 隊列管理器的名稱
*/
public void setQM_NAME(String QMgrName) {
QM_NAME = QMgrName;
}
/**
* 取得隊列管理器的名稱
* @return String 隊列管理器名稱
*/
public String getQM_NAME() {
return QM_NAME;
}
/**
* 設置隊列的名稱
* @param QName 隊列的名稱
*/
public void setQ_NAME(String QName) {
Q_NAME = QName;
}
/**
* 取得隊列的名稱
* @return String 隊列的名稱
*/
public String getQ_NAME() {
return Q_NAME;
}
/**
* 取得隊列名稱數組
* @return String[]
*/
public String[] getQ_NAMES() {
return queue;
}
/**
* 設置隊列名稱數組
* @param q
*/
public void setQ_NAMES(String[] q) {
queue = q;
}
/**
* 取得完成碼
* @return int 完成碼
*/
public int getComCode() {
return completion_code;
}
/**
* 設置完成碼
* @param code 完成碼
*/
public void setComCode(int code) {
completion_code = code;
}
/**
* 取得原因碼
* @return int 原因碼
*/
public int getReaCode() {
return reason_code;
}
/**
* 設置原因碼
* @param code 原因碼
*/
public void setReaCode(int code) {
reason_code = code;
}
/**
* 設置發送消息
* @param message 要發送的消息
*/
public void setOutMessage(String message) {
outMessage = message;
}
/**
* 獲取要發送的消息
* @return String 要發送的消息
*/
public String getOutMessage() {
return outMessage;
}
/**
* 設置接收消息
* @param message
*/
public void setInMessage(String message) {
inMessage = message;
}
/**
* 獲取接收到的消息
* @return
*/
public String getInMessage() {
return inMessage;
}
/**
* 獲取MQI的名稱
* @return String MQI名稱
*/
public String getMQIName() {
return MQI_NAME;
}
/**
* 設置MQI的名稱
* @param mqiName MQI名稱
*/
public void setMQIName(String mqiName) {
MQI_NAME = mqiName;
}
/**
* 獲得返回信息
* @return String
*/
public String getreturn_message() {
runflag = IDLE;
return return_message;
}
/**
* 屏幕打印
* @param ch
* @param msg
*/
private void myprintln(int ch, String msg) {
mywindow.println(ch, msg);
//System.out.println(msg);
}
public void run() {
int i;
//completion_code = 0;
return_message = "--";
MQOperator mqOperator = new MQOperator();
for(i = 0; ;i ++) {
//myprintln(3, "runflag=" + runflag);
switch(runflag) {
case 1:
MQI_NAME = "PutMessage";
put(mqOperator);
//return_message = new Date() + "Complete!\n";
if(completion_code == 0) {
return_message = "[MQI]:" + MQI_NAME + "[完成碼]:MQCC_OK" + "("
+ completion_code + ")" + "[原因碼]:" + "(" + reason_code + ")";
} else if(completion_code == 1) {
return_message = "[MQI]:" + MQI_NAME + "[完成碼]:MQCC_WARNING" + "("
+ completion_code + ")" + "[原因碼]:" + "(" + reason_code + ")";
} else {
return_message = "[MQI]:" + MQI_NAME + "[完成碼]:MQCC_FAILED" + "("
+ completion_code + ")" + "[原因碼]:" + "(" + reason_code + ")";
}
runflag = WAITRETURN;
break;
case 2:
MQI_NAME = "GetMessage";
get(mqOperator);
//return_message = new Date() + "Complete!\n";
if(completion_code == 0) {
return_message = "[MQI]:" + MQI_NAME + "[完成碼]:MQCC_OK" + "("
+ completion_code + ")" + "[原因碼]:" + "(" + reason_code + ")";
} else if(completion_code == 1) {
return_message = "[MQI]:" + MQI_NAME + "[完成碼]:MQCC_WARNING" + "("
+ completion_code + ")" + "[原因碼]:" + "(" + reason_code + ")";
} else {
return_message = "[MQI]:" + MQI_NAME + "[完成碼]:MQCC_FAILED" + "("
+ completion_code + ")" + "[原因碼]:" + "(" + reason_code + ")";
}
runflag = WAITRETURN;
break;
case 3:
MQI_NAME = "MQQueueManager";
connQMgr(mqOperator);
//System.out.println(completion_code);
//System.out.println(reason_code);
//return_message = new Date() + "Complete!\n";
if(completion_code == 0) {
return_message = "[MQI]:" + MQI_NAME + "[完成碼]:MQCC_OK" + "("
+ completion_code + ")" + "[原因碼]:" + "(" + reason_code + ")";
} else if(completion_code == 1) {
return_message = "[MQI]:" + MQI_NAME + "[完成碼]:MQCC_WARNING" + "("
+ completion_code + ")" + "[原因碼]:" + "(" + reason_code + ")";
} else {
return_message = "[MQI]:" + MQI_NAME + "[完成碼]:MQCC_FAILED" + "("
+ completion_code + ")" + "[原因碼]:" + "(" + reason_code + ")";
}
runflag = WAITRETURN;
break;
case 4:
MQI_NAME = "ListQueues";
getQueueName(mqOperator);
//return_message = new Date() + "Complete!\n";
return_message = "Connect Success!\n";
runflag = WAITRETURN;
break;
default:
try {
//myprintln(4, "sleep");
sleep(2000);
} catch(Exception e) {
}
break;
}
}
}
/**
* 控制線程為被占用
*/
public synchronized void mysuspend() {
suspendFlag = true;
}
/**
* 控制線程重新被使用
*/
public synchronized void myresume() {
suspendFlag = false;
try {
notify(); //Wakes up a single thread that is waiting on this object's monitor
} catch(Exception e) {
System.out.println("notify error:" + e.getMessage());
}
}
/**
* 發送消息
* @param op
* @return boolean
*/
public boolean put(MQOperator op) {
mqOp = op;
if(mqOp.connQManager(QM_NAME) == null) {
myprintln(3, "輸入無效!");
return false;
} else if(mqOp.openQueue(Q_NAME) == null) {
//myprintln(3, "選擇有誤!");
return false;
} else if(mqOp.getCurQueueDepth() >= mqOp.getMaxQueueDepth() - 100) {
myprintln(2, "請注意!隊列可放消息空間不足!");
return false;
} else {
if(mqOp.putMessage(outMessage) != 1) {
myprintln(2, "發送失敗!");
} else {
myprintln(2, "發送成功!");
}
}
completion_code = mqOp.getCompletionCode();
reason_code = mqOp.getReasonCode();
mqOp.closeQueue();
mqOp.disConnection();
return true;
}
/**
* 讀取消息
* @param op
* @return boolean
*/
public boolean get(MQOperator op) {
mqOp = op;
if(mqOp.connQManager(QM_NAME) == null) {
return false;
} else if(mqOp.openQueue(Q_NAME) == null) {
return false;
} else {
if(mqOp.getCurQueueDepth() == 0) {
myprintln(2, "隊列為空!");
} else {
myprintln(2, "[獲取的消息為]:" + mqOp.getMessage());
//setInMessage(mqOp.getMessage());
}
}
completion_code = mqOp.getCompletionCode();
reason_code = mqOp.getReasonCode();
mqOp.closeQueue();
mqOp.disConnection();
return true;
}
/**
* 連接隊列管理器
* @param op
* @return boolean
*/
public boolean connQMgr(MQOperator op) {
mqOp = op;
if(mqOp.connQManager(QM_NAME) == null) {
myprintln(3, "輸入無效,請重新輸入隊列管理器!");
completion_code = mqOp.getCompletionCode();
reason_code = mqOp.getReasonCode();
return false;
} else {
myprintln(3, "輸入有效,請選擇隊列!");
return true;
}
}
/**
* 獲取隊列名稱
* @param op
* @return boolean
*/
public boolean getQueueName(MQOperator op) {
mqOp = op;
queue = mqOp.listQueueName(QM_NAME);
completion_code = mqOp.getCompletionCode();
reason_code = mqOp.getReasonCode();
return true;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -