Go melody库基本使用

发布时间 2023-12-09 16:54:07作者: 潜行1

就参考如下:
基本就是初始化, 定义钩子, 跟gin绑定


var m *melody.Melody

// 单例初始化 melody
func initUsbMelody() {
	if m != nil {
		return
	}

	m = melody.New()
	cfg := &melody.Config{
		WriteWait:         10 * time.Second,
		PongWait:          1 * time.Second,
		PingPeriod:        (1 * time.Second * 9) / 10,
		MaxMessageSize:    4096,
		MessageBufferSize: 2048,
	}
	m.Config = cfg

	// debug log级别:打印客户端已连接
	m.HandleConnect(func(s *melody.Session) {
		logger.Log.Debugf("%v 已连接\n", s.RemoteAddr())
	})

	// debug log级别:打印客户端已断开
	m.HandleDisconnect(func(s *melody.Session) {
		logger.Log.Debugf("%v 已断开\n", s.RemoteAddr())
	})

	m.HandleMessage(func(s *melody.Session, msg []byte) {
		logger.Log.Debugf("接收到 %v 的信息\n", s.RemoteAddr())
		// 解析前端的websocket信息方式: json解析; 使用 mapstructure配合gojsonq,更加灵活

		var msgType string
		var data any

		switch msgType {
		case "start": // 开始制作
			// ... 调用业务
			// 不考虑做取消。 dd开始之后整个U盘的数据就已经被覆盖了
			_ = data
		}

	})
}

// 将镜像文件覆盖到pe中
func MakeWinpeController() gin.HandlerFunc {
	return func(c *gin.Context) {
		initUsbMelody()
		err := m.HandleRequest(c.Writer, c.Request)
		_ = err
	}
}