package middleware

import (
	"fengkuangGameServerJob/pkg/app"
	"fengkuangGameServerJob/pkg/errcode"
	"fengkuangGameServerJob/pkg/setting"
	"fengkuangGameServerJob/pkg/util"
	"fengkuangGameServerJob/service"
	"github.com/gin-gonic/gin"
)

var playerService = service.NewPlayerService()

// LimitMiddleware 限流器
func LimitMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {
		//1 得到ip地址
		ipAddr := util.GetRealIp(c)
		//2 是否在黑名单中,检查最近1分钟内访问的次数
		if playerService.InBlackList(ipAddr) == true  {
			app.Failed(c, errcode.ToManyRequest)
			c.Abort()
			return
		}
		//3 当前访问次数是否可继续
		maxRate := setting.Settings.Server.RateLimit
		if playerService.CanVisit(ipAddr, maxRate) == false {
			app.Failed(c, errcode.ToManyRequest)
			c.Abort()
			return
		}
		c.Next()
	}
}
