Files
open-im-server/internal/msggateway/context.go
T

102 lines
2.4 KiB
Go
Raw Normal View History

2023-03-08 18:39:18 +08:00
package msggateway
2023-02-14 21:08:36 +08:00
2023-02-16 16:32:31 +08:00
import (
2023-03-23 15:14:50 +08:00
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant"
2023-03-16 10:46:06 +08:00
"github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
2023-02-16 16:32:31 +08:00
"net/http"
"strconv"
2023-03-23 15:14:50 +08:00
"time"
2023-02-16 16:32:31 +08:00
)
2023-02-14 21:08:36 +08:00
type UserConnContext struct {
RespWriter http.ResponseWriter
Req *http.Request
Path string
Method string
RemoteAddr string
2023-03-23 15:14:50 +08:00
ConnID string
}
func (c *UserConnContext) Deadline() (deadline time.Time, ok bool) {
return
}
func (c *UserConnContext) Done() <-chan struct{} {
return nil
}
func (c *UserConnContext) Err() error {
return nil
}
func (c *UserConnContext) Value(key any) any {
switch key {
case constant.OpUserID:
2023-03-23 15:56:47 +08:00
return c.GetUserID()
2023-03-23 15:14:50 +08:00
case constant.OperationID:
2023-03-23 15:56:47 +08:00
return c.GetOperationID()
2023-03-23 15:14:50 +08:00
case constant.ConnID:
2023-03-23 15:56:47 +08:00
return c.GetConnID()
2023-03-23 15:14:50 +08:00
case constant.OpUserPlatform:
2023-03-23 15:56:47 +08:00
return constant.PlatformIDToName(utils.StringToInt(c.GetPlatformID()))
case constant.RemoteAddr:
return c.RemoteAddr
2023-03-23 15:14:50 +08:00
default:
return ""
}
2023-02-14 21:08:36 +08:00
}
func newContext(respWriter http.ResponseWriter, req *http.Request) *UserConnContext {
return &UserConnContext{
RespWriter: respWriter,
Req: req,
Path: req.URL.Path,
Method: req.Method,
RemoteAddr: req.RemoteAddr,
2023-03-23 15:14:50 +08:00
ConnID: utils.Md5(req.RemoteAddr + "_" + strconv.Itoa(int(utils.GetCurrentTimestampByMill()))),
2023-02-14 21:08:36 +08:00
}
}
2023-06-04 14:42:36 +08:00
func (c *UserConnContext) GetRemoteAddr() string {
return c.RemoteAddr
}
2023-02-16 16:32:31 +08:00
func (c *UserConnContext) Query(key string) (string, bool) {
var value string
if value = c.Req.URL.Query().Get(key); value == "" {
return value, false
}
return value, true
}
func (c *UserConnContext) GetHeader(key string) (string, bool) {
var value string
if value = c.Req.Header.Get(key); value == "" {
return value, false
}
return value, true
}
func (c *UserConnContext) SetHeader(key, value string) {
c.RespWriter.Header().Set(key, value)
}
func (c *UserConnContext) ErrReturn(error string, code int) {
http.Error(c.RespWriter, error, code)
}
func (c *UserConnContext) GetConnID() string {
2023-03-23 15:14:50 +08:00
return c.ConnID
2023-02-16 16:32:31 +08:00
}
func (c *UserConnContext) GetUserID() string {
2023-03-08 18:39:18 +08:00
return c.Req.URL.Query().Get(WsUserID)
2023-02-14 21:08:36 +08:00
}
2023-02-16 16:32:31 +08:00
func (c *UserConnContext) GetPlatformID() string {
2023-03-08 18:39:18 +08:00
return c.Req.URL.Query().Get(PlatformID)
2023-02-14 21:08:36 +08:00
}
2023-03-23 15:14:50 +08:00
func (c *UserConnContext) GetOperationID() string {
return c.Req.URL.Query().Get(OperationID)
}
func (c *UserConnContext) GetBackground() bool {
b, err := strconv.ParseBool(c.Req.URL.Query().Get(BackgroundStatus))
if err != nil {
return false
} else {
return b
}
}