closeTopic.java 1.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
package top.luckysmile.mqtt.client.server;

import java.util.List;

import javax.swing.JOptionPane;

import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;

import top.luckysmile.mqtt.client.view.MQTTChatView;
/**
 * 取消订阅,会话列表里的按钮最终触发的事件
 * @author minuy
 *
 */
public class closeTopic {
	/**
	 * 取消订阅并关闭会话视图
	 * @param vo 视图操作类,用于关闭会话视图
	 * @param MC Mqtt客户端对象,取消订阅用
	 * @param chatSession 管理器的视图列表,用于查找关闭是否有效
	 * @param mcv 发起取消订阅请求的视图,用于搜索
	 * @param mqttServerManage 管理器,回调用
	 */
	public closeTopic(ViewOpt vo,MqttClient MC,List<MQTTChatView> chatSession,MQTTChatView mcv, MqttServerManage mqttServerManage) {
		//找主题
		for (int i = 0; i < chatSession.size(); i++) {
			//如果会话主题和要关闭的主题相同
			if(mcv.getJlbChatTopic().getText().equals(chatSession.get(i).getJlbChatTopic().getText())) {
				try {
					//取消订阅主题
					MC.unsubscribe(mcv.getJlbChatTopic().getText());
					//把主题从主题列表和视图列表中删除
					mqttServerManage.SubDrop(mcv.getJlbChatTopic().getText());
					mqttServerManage.removeSession(mcv);
					//关闭视图
					vo.CloseSessionWindow(mcv.getJlbChatTopic().getText());
				} catch (MqttException e) {
					System.out.println(e.toString());
					JOptionPane.showMessageDialog(null, "没有订阅这个主题!","错误",2);
				}
			}
		}
	}
}