package net.fs.client;

import net.fs.rudp.ConnectionUDP;
import net.fs.rudp.UDPInputStream;
import net.fs.rudp.UDPOutputStream;
import net.fs.utils.MLog;

import java.io.InputStream;
import java.io.OutputStream;

public class Pipe {


    public Pipe p2;
    int lastTime = -1;
    boolean readed = false;
    byte[] pv;

    int pvl;

    int readedLength;

    int dstPort = -1;

    public void pipe(InputStream is, UDPOutputStream tos, int initSpeed, final Pipe p2) throws Exception {

        int len;
        byte[] buf = new byte[100 * 1024];
        boolean sendeda = false;
        while ((len = is.read(buf)) > 0) {
            readed = true;
            if (!sendeda) {
                sendeda = true;
            }
            tos.write(buf, 0, len);
        }
    }


    void sendSleep(long startTime, int speed, int length) {
        long needTime = (long) (1000f * length / speed);
        long usedTime = System.currentTimeMillis() - startTime;
        if (usedTime < needTime) {
            try {
                Thread.sleep(needTime - usedTime);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }


    public void pipe(UDPInputStream tis, OutputStream os, int maxSpeed, ConnectionUDP conn) throws Exception {
        int len;
        byte[] buf = new byte[1000];
        boolean sended = false;
        boolean sendedb = false;
        int n = 0;
        boolean msged = false;
        while ((len = tis.read(buf, 0, buf.length)) > 0) {
            readedLength += len;
            if (!sendedb) {
                pv = buf;
                pvl = len;
                sendedb = true;
            }
            if (dstPort > 0) {
                if (ClientUI.ui != null) {
                    if (!msged) {
                        msged = true;
                        String msg = "端口" + dstPort + "连接成功";
                        ClientUI.ui.setMessage(msg);
                        MLog.println(msg);
                    }

                }
            }
            os.write(buf, 0, len);
            if (!sended) {
                sended = true;
            }
        }
    }


    public int getReadedLength() {
        return readedLength;
    }


    public void setDstPort(int dstPort) {
        this.dstPort = dstPort;
    }

}