package main

//仅允许使用官方包
import (
	"bytes"
	"strings"
)

/*
   你可以右键，命令面板（或F1快捷键）,查看模板文件,或恢复到默认代码
   当您修改完成后,右键测试保存即可
*/

// 脚本回调事件 -> HTTP 发起请求、HTTP 响应请求、HTTP 请求错误
func Event_HTTP(Conn HTTPEvent) {
	if Conn.Type() == 1 {
		//发送请求
		return
	}
	if Conn.Type() == 2 {
		//接收到响应
		return
	}
	if Conn.Type() == 3 {
		//请求失败
		return
	}
}

// WebSocket回调事件 -> 发送消息、收到消息、连接成功、连接断开
func Event_WebSocket(Conn WebSocketEvent) {
	if Conn.Type() == 1 {
		//连接成功
		return
	}
	if Conn.Type() == 2 {
		//客户端发送数据
		return
	}
	if Conn.Type() == 3 {
		//客户端收到数据
		return
	}
	if Conn.Type() == 4 {
		//连接关闭
		return
	}
}

// tcp回调事件 -> 即将连接、发送消息、收到消息、连接成功、连接断开
func Event_TCP(Conn TCPEvent) {
	//不执行代码,仅查看模板代码
	execCode := false
	if !execCode {
		return
	}
	//设置代理
	if Conn.Type() == 0 {
		{
			//对这个TCP重定向
			Conn.SetNewAddress("8.8.8.8:443")
		}
		{
			//对这个请求设置代理
			Conn.SetAgent("socket5://admin:123456@127.0.0.1:8888", 30*1000)
			Conn.SetAgent("http://admin:123456@127.0.0.1:8888", 30*1000)
			//或者 无账号密码
			Conn.SetAgent("socket5://127.0.0.1:8888", 30*1000)
			Conn.SetAgent("http://127.0.0.1:8888", 30*1000)
		}
	}
	//收到客户端发送数据
	if Conn.Type() == 2 {
		{
			//取消客户端发送到服务器的数据
			Conn.SetBody([]byte{})
		}
		{
			//修改部分提交数据
			if BytesIndex(Conn.Body(), []byte("123456")) != -1 {
				Conn.SetBody(BytesReplace(Conn.Body(), []byte("123456"), []byte("Conn")))
			}
		}
		{
			//主动关闭这里TCP请求
			if BytesIndex(Conn.Body(), []byte("123456")) != -1 {
				Conn.Close()
			}
		}
	}
	//收到服务器响应数据
	if Conn.Type() == 3 {
		{
			//取消服务器发送数据到客户端
			Conn.SetBody([]byte{})
		}
		{
			//修改部分响应数据
			if BytesIndex(Conn.Body(), []byte("123456")) != -1 {
				Conn.SetBody(BytesReplace(Conn.Body(), []byte("123456"), []byte("Conn")))
			}
		}
	}
	//连接断开
	if Conn.Type() == 4 {
		Log("这个tcp请求(已经断开):", Conn.LocalAddress, Conn.RemoteAddress)
	}
}

// udp回调事件 -> 发送消息、收到消息、连接断开
func Event_UDP(Conn UDPEvent) {
	if Conn.Type() == 1 {
		//连接关闭
		return
	}
	if Conn.Type() == 2 {
		//客户端收到数据
		return
	}
	if Conn.Type() == 3 {
		//收到数据
		return
	}
}
