⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controlwindow.java

📁 中国联通短信通信协议
💻 JAVA
字号:
package com.wireless.sms.gwif.smsagent.workthread;

/**
 * <p>Title: WVAS-PLATFORM-SMS</p>
 * <p>Description: 无线增值业务平台----短信平台-----接口机程序</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: moon</p>
 * @author: tech team
 * @version 1.0
 */

import java.util.HashMap;
import java.util.Iterator;
import java.util.Vector;

//import org.apache.log4j.Logger;
import com.wireless.sms.pub.entity.MT;
import com.wireless.sms.pub.mq.*;
import com.wireless.sms.gwif.smsagent.global.SmsGWIFGlobal;
//import com.wireless.sms.gwif.smsagent.global.LoggerConstant;

public class ControlWindow {

    private static ControlWindow _instance = new ControlWindow();
    private HashMap hashMap = new HashMap();
//    private MTQueue mtqueue = MTQueue.getInstance();
    private ObjectQueue statqueue = ObjectQueue.getInstance();
    private int waitTime = SmsGWIFGlobal.waitTime;

    private ControlWindow() {}

    /** 线程同步控制确保模块仅有一个实例 */
    public synchronized static ControlWindow getInstance() {
        return _instance;
    }

    /***
     * Returns the current number of object in the queue
     */
    public synchronized int size() {
        return hashMap.size();
    }

    /***
     * adds HashMap.
     * At least one thread will be notified.
     */
    public synchronized void put(Object key, Object Value) {
        hashMap.put(key, Value);//Value=处理类processSend生成的Vector,有2个Element,分别是mt和System.currentTimeMillis()
//        notify();
    }

    /**
     * 该方法将根据flag值进行响应
     * @param key	flag=false时,为mt的seqnum,该键将在滑动窗口中有映射值(MT+MT发送时间);flag=true时该参数无效.
     * @param flag	该值为true时,从滑动窗口中移除等待应答超时的MT的HashMap映射值,同时将其状态设置为T;
     * 				为false时,返回请求seqnum对应的HashMap里映射的Vector值(Element包含MT,PutTime)
     * @return	返回Object(实际是Vector)
     */
    public synchronized Object get(Object key, boolean flag) {
        Object value = null;

        if (flag) {
          System.out.println("-----------------清理滑动窗口!");
            Iterator item = hashMap.keySet().iterator();
            Vector tmpKeyWordArray = new Vector();
            while (item.hasNext()) {
                Object tmpkey = item.next();
                Vector tmpv = (Vector)hashMap.get(tmpkey);
                MT tmpmt = (MT)tmpv.get(0);
                String tmpTime = (String)tmpv.get(1);
                long putTime = Long.parseLong(tmpTime);

                if ( System.currentTimeMillis() - putTime > (waitTime * 1000)) {
                    //hashMap.remove(tmpkey);
                    tmpKeyWordArray.add(tmpkey);

                    //modified by liangchw  9.22
                    tmpmt.setStatus("T");//超时
                    statqueue.add(tmpmt);
                }
            }
            for (int i = 0; i < tmpKeyWordArray.size(); i++) {
                hashMap.remove(tmpKeyWordArray.elementAt(i));
            }
            tmpKeyWordArray.removeAllElements();
        }else{
            value = hashMap.get(key);
        }
//        notify();
        return value;
    }

    public HashMap getMap(){
        return hashMap;
    }

    /***
     * Removes the first object from the HashTable, blocking until one is available.
     * Note that this method will never return null and could block forever.
     */
    public synchronized Object remove(Object key) {
        return hashMap.remove(key);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -