package netlib

import (
	"fmt"
	"reflect"

	"mongo.games.com/goserver/core/logger"
	"mongo.games.com/goserver/core/profile"
	"mongo.games.com/goserver/core/utils"
)

type action struct {
	s       *Session
	p       interface{}
	n       string
	packid  int
	logicNo uint32
	next    *action
}

func (this *action) do() {
	watch := profile.TimeStatisticMgr.WatchStart(fmt.Sprintf("/action/%v", this.n), profile.TIME_ELEMENT_ACTION)
	defer func() {
		FreeAction(this)
		if watch != nil {
			watch.Stop()
		}
		utils.DumpStackIfPanic(fmt.Sprintf("netlib.session.task.do exe error, packet type:%v", reflect.TypeOf(this.p)))
	}()

	h := GetHandler(this.packid)
	if h != nil {
		err := h.Process(this.s, this.packid, this.p)
		if err != nil {
			logger.Logger.Infof("%v process error %v", this.n, err)
		}
	} else {
		logger.Logger.Infof("%v not registe handler", this.n)
	}
}
