All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scouter.agent.batch.netio.mtu.MultiPacketProcessor Maven / Gradle / Ivy

There is a newer version: 2.20.0
Show newest version
package scouter.agent.batch.netio.mtu;

import java.io.IOException;
import java.net.InetAddress;

import scouter.agent.batch.Configure;
import scouter.agent.batch.Logger;
import scouter.util.LongEnumer;
import scouter.util.LongKeyLinkedMap;
import scouter.util.ThreadUtil;

public class MultiPacketProcessor extends Thread{
	private static MultiPacketProcessor instance = null;

    static final int MAX_COUNT = 1000;
    private LongKeyLinkedMap buffer = new LongKeyLinkedMap();
	
	static public MultiPacketProcessor getInstance(){
		if(instance == null){
			instance = new MultiPacketProcessor();
            instance.setDaemon(true);
            instance.setName(ThreadUtil.getName(instance));
            
            instance.start();
 		}
		return instance;
	}
	
	private MultiPacketProcessor(){
		buffer.setMax(MAX_COUNT);
	}
	
	public void run() {
        while (true) {
            ThreadUtil.sleep(1000);
            if (buffer.size() > 0) {
                try {
                    checkExpired();
                } catch(Exception ex) {
                	ex.printStackTrace();
                }
            }
        }
	}
	
    public byte[] add(long pkid, int total, int num, byte [] data, int objHash, InetAddress addr) throws IOException{
    	MultiPacket p;
    	synchronized(buffer){
    		p = buffer.get(pkid);
            if (p == null) {
                    p = new MultiPacket(total, objHash, addr);
                    buffer.put(pkid, p);
            }
        }

        p.set(num, data);
        if (p.isDone()) {
        	buffer.remove(pkid);
            return p.toBytes();
        }
        return null;
    }
    
    private void checkExpired() {
        LongEnumer en = buffer.keys();
        long key;
        MultiPacket p;
        while (en.hasMoreElements() == true) {
            key = en.nextLong();
            p = buffer.get(key);
            if (p.isExpired()) {
                buffer.remove(key);
//                if (Configure.getInstance().log_expired_multipacket) {
//                    Logger.println("S150", p.toString());
//                }
            }
        }
    }	

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy