Beispiel #1
0
func (s *Server) init() {
	if s.SessionTimeOut == 0 {
		s.SessionTimeOut = 20
	}
	s.DPM = NewDataPkgManager(5, 5)
	if s.Id == "" {
		s.Id = util.GetUUID()
	}
	if s.TimeOut == 0 {
		//默认300秒,没有任何数据就关闭链接
		s.TimeOut = 300
	}
	if s.MaxClient == 0 {
		//默认最大100个链接
		s.MaxClient = 10
	}
	if s.MaxData == 0 {
		//未设置读取报文大小,默认800字节
		s.MaxData = 800
	}
	//判断启动的端口是否为空,如果为空给一个默认端口
	if s.Port == 0 {
		//默认8888端口启动
		s.Port = 8888
	}
	//指定session会话的超时时间
	s.MemProvider = NewSessionStore(s.SessionTimeOut)
	//指定最大链接数量
	s.maxClientChan = make(chan int, s.MaxClient)
	if s.Name == "" {
		//服务器名字没有指定使用IP加端口为服务器名称
		s.Name = s.Ip + ":" + strconv.Itoa(s.Port)
	}
}
Beispiel #2
0
func (c *Conn) WriteJsonFaceCode(b interface{}, faceCode int) {
	var rsp Respon
	//请求数据的ID
	if c != nil && c.Request != nil {
		rsp.Header.RequestId = c.Request.Header.RequestId
		rsp.Header.UserUid = c.Request.Header.UserUid
		rsp.Header.UserAddr = c.Request.Header.UserAddr
	}
	rsp.Header.FaceCode = faceCode
	rsp.Header.ResponsId = util.GetUUID()
	rsp.Header.ResponTime = time.Now().Unix()
	switch e := b.(type) {
	case *errcode.Error:
		rsp.Header.ErrMsg = e.Msg
		rsp.Header.ErrCode = e.Code
	case error:
		rsp.Header.ErrMsg = e.Error()
		rsp.Header.ErrCode = -1
	default:
		rsp.Header.ErrCode = 0
		rsp.Body = b
	}
	d, _ := json.Marshal(&rsp)
	d = util.ByteLen(d)
	//加入包推送信息
	if c.Server != nil && c.Server.DPM != nil && rsp.Header.FaceCode != 520 && rsp.Header.FaceCode != 200 {
		c.Server.DPM.AddPkg(rsp.Header.ResponsId, c.Conn.RemoteAddr().String(), rsp.Header.UserUid, d)
	}

	c.Write(d)
}
Beispiel #3
0
func NewRequest(conn net.Conn, data interface{}, s *Server) *Request {
	var r Request
	r.Header.UserAddr = conn.LocalAddr().String()
	r.Header.RequestId = util.GetUUID()
	r.Header.RequestTime = time.Now().Local().Unix()
	r.Body = data
	if s != nil {
		r.Header.UserUid = s.Id
	}
	return &r
}