Package TCM_MPI.Buffer

Source Code of TCM_MPI.Buffer.FragmentFileBuffer

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package TCM_MPI.Buffer;

import TCM_MPI.Buffer.Data.FragmentFileData;
import java.io.File;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.util.concurrent.ConcurrentHashMap;

/**
*
* @author dev
*/
public class FragmentFileBuffer {
   
    private ConcurrentHashMap<String,FragmentFileData> _HASH_MAP;
   
    public FragmentFileBuffer(){
        this._HASH_MAP = new ConcurrentHashMap<String, FragmentFileData>();
    }
   
    public synchronized void UpdateFragmentedData(ByteBuffer IDS,ByteBuffer NUMS){
       
        int FROM_ID,TO_ID,TYPE_ID,TOTAL_NUMBERS,TOTAL_PACOTES,PACOTE_ATUAL;
        long SEQUENCE_NUMBER;
        FragmentFileData FRAG_FILE = null;
       
        //  REMETENTE
        FROM_ID = IDS.getInt(0);
        //  DESTINATARIO
        TO_ID = IDS.getInt(4);
        //  TIPODE DADOS
        TYPE_ID = IDS.getInt(8);
        //  TOTAL DE INFORMAÇÕES A RECEBER
        TOTAL_NUMBERS = IDS.getInt(12);
        //  NUMERAÇÃO DE SEQUENCIA DO PACOTE
        SEQUENCE_NUMBER = IDS.getLong(16);
        //  TOTAL DE PACOTES FRAGMENTADOS
        TOTAL_PACOTES = IDS.getInt(24);
        //  NUMERO DO FRAGMENTO ATUAL
        PACOTE_ATUAL = IDS.getInt(28);
       
        String KEY = FROM_ID + ":" + TO_ID + ":" + SEQUENCE_NUMBER;
       
        if(PACOTE_ATUAL == 0 && TOTAL_NUMBERS == 0){
           
            FRAG_FILE = CreateFragmentFile(IDS, NUMS);
            this._HASH_MAP.put(KEY, FRAG_FILE);
           
        }else{
           
            FRAG_FILE = this._HASH_MAP.get(KEY);
            UpdateRandomFile(FRAG_FILE, NUMS);
           
        }
       
    }
   
    private FragmentFileData CreateFragmentFile(ByteBuffer IDS,ByteBuffer NUMS){
        FragmentFileData frag = new FragmentFileData();
       
        try{
            long FILE_LEN = NUMS.getLong(0);
            String FILE_NAME = getFileName(8, NUMS);
            frag.FILE = new File(FILE_NAME);
            frag.FILE.createNewFile();
            frag.RANDOM_FILE = CreateBlankFile(frag.FILE, FILE_LEN);
        }catch(Exception ex){
        }
       
        return frag;
    }
   
    private String getFileName(int start,ByteBuffer NUMS){
        StringBuilder name = new StringBuilder();
        for(int x=start ; x < NUMS.capacity() ; x+=2){
            name.append(NUMS.getChar(x));
        }
        return name.toString();
    }
   
    private RandomAccessFile CreateBlankFile(File file,long file_len){
        RandomAccessFile RANDOM_FILE = null;
        try{
            RANDOM_FILE = new RandomAccessFile(file, "rwd");
            for(long lng=0 ; lng < file_len ; lng++){
                RANDOM_FILE.writeByte(0);
            }
        }catch(Exception ex){
        }
        return RANDOM_FILE;
    }
   
    private void UpdateRandomFile(FragmentFileData FRAG_FILE,ByteBuffer NUMS){
       
        long FILE_POSITION = NUMS.getLong(0);
        byte BYTES[] = NUMS.array();
        NUMS = null;
        try{
            //  POSICIONA O PONTEIRO DO ARQUIVO
            FRAG_FILE.RANDOM_FILE.seek(FILE_POSITION);
            //  ESCREVER OS BYTES RECEBIDOS NO ARQUIVO
            FRAG_FILE.RANDOM_FILE.write(BYTES, 8, BYTES.length - 8);
            //  INCREMENTA O TOTAL DE PACOTES RECEBIDOS
            FRAG_FILE.TOTAL_PACKAGES++;
            //  INCREMENTA O TOTAL DE BYTES RECEBIDOS
            FRAG_FILE.BYTES_RECEIVED += (BYTES.length - 8);
        }catch(Exception ex){
        }
       
    }
   
}
TOP

Related Classes of TCM_MPI.Buffer.FragmentFileBuffer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.