

package network;

import java.util.*;

public class NetworkStatDataModel {

    final int UDP_HEADER_SIZE = 28;

    private Vector records;
    public long totalRecvBytes = 0;
    public int totalRecvPackets = 0;
    public long totalSendBytes = 0;
    public int totalSendPackets = 0;

    public long currentRecvBytes = 0;
    public long currentSendBytes = 0;

    public long startTime;

    public NetworkStatDataModel() {
        records = new Vector();
        startTime = Calendar.getInstance().getTime().getTime();
    }

    public void addRecord(String name) {
        records.addElement(new NetworkStatRecord(name));
    }

    public synchronized void editRecvRecord(int index, int numBytes) {
        int inc = numBytes + UDP_HEADER_SIZE;
        NetworkStatRecord record = (NetworkStatRecord)records.elementAt(index);
        record.recvNumBytes += inc;
        record.recvNumPackets ++;
        record.currentRecvBytes += inc;

        totalRecvBytes += inc;
        totalRecvPackets ++;
        currentRecvBytes += inc;
    }

    public synchronized void editSendRecord(int index, int numBytes) {
        int inc = numBytes + UDP_HEADER_SIZE;
        NetworkStatRecord record = (NetworkStatRecord)records.elementAt(index);
        record.sendNumBytes += inc;
        record.sendNumPackets ++;
        record.currentSendBytes += inc;

        totalSendBytes += numBytes + UDP_HEADER_SIZE;
        totalSendPackets ++;
        currentSendBytes += inc;

    }

    public synchronized Vector getRecords() {
        return records;
    }

    public synchronized void clearNodeTranscient() {
        for (Enumeration e = records.elements(); e.hasMoreElements();) {
            NetworkStatRecord rec = (NetworkStatRecord)e.nextElement();
            rec.currentRecvBytes = 0;
            rec.currentSendBytes = 0;
        }
    }

    public synchronized void clearOverallTranscient() {
        currentRecvBytes = 0;
        currentSendBytes = 0;
    }

}


