112 lines
2.1 KiB
Go
112 lines
2.1 KiB
Go
package ctx
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
|
|
"github.com/go-gost/core/logger"
|
|
)
|
|
|
|
// clientAddrKey saves the client address.
|
|
type clientAddrKey struct{}
|
|
|
|
type ClientAddr string
|
|
|
|
var (
|
|
keyClientAddr clientAddrKey
|
|
)
|
|
|
|
func ContextWithClientAddr(ctx context.Context, addr ClientAddr) context.Context {
|
|
return context.WithValue(ctx, keyClientAddr, addr)
|
|
}
|
|
|
|
func ClientAddrFromContext(ctx context.Context) ClientAddr {
|
|
v, _ := ctx.Value(keyClientAddr).(ClientAddr)
|
|
return v
|
|
}
|
|
|
|
// sidKey saves the session ID.
|
|
type sidKey struct{}
|
|
type Sid string
|
|
|
|
var (
|
|
keySid sidKey
|
|
)
|
|
|
|
func ContextWithSid(ctx context.Context, sid Sid) context.Context {
|
|
return context.WithValue(ctx, keySid, sid)
|
|
}
|
|
|
|
func SidFromContext(ctx context.Context) Sid {
|
|
v, _ := ctx.Value(keySid).(Sid)
|
|
return v
|
|
}
|
|
|
|
// hashKey saves the hash source for Selector.
|
|
type hashKey struct{}
|
|
|
|
type Hash struct {
|
|
Source string
|
|
}
|
|
|
|
var (
|
|
clientHashKey = &hashKey{}
|
|
)
|
|
|
|
func ContextWithHash(ctx context.Context, hash *Hash) context.Context {
|
|
return context.WithValue(ctx, clientHashKey, hash)
|
|
}
|
|
|
|
func HashFromContext(ctx context.Context) *Hash {
|
|
if v, _ := ctx.Value(clientHashKey).(*Hash); v != nil {
|
|
return v
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type clientIDKey struct{}
|
|
type ClientID string
|
|
|
|
var (
|
|
keyClientID = &clientIDKey{}
|
|
)
|
|
|
|
func ContextWithClientID(ctx context.Context, clientID ClientID) context.Context {
|
|
return context.WithValue(ctx, keyClientID, clientID)
|
|
}
|
|
|
|
func ClientIDFromContext(ctx context.Context) ClientID {
|
|
v, _ := ctx.Value(keyClientID).(ClientID)
|
|
return v
|
|
}
|
|
|
|
type bufferKey struct{}
|
|
|
|
var (
|
|
keyBuffer = &bufferKey{}
|
|
)
|
|
|
|
func ContextWithBuffer(ctx context.Context, buffer *bytes.Buffer) context.Context {
|
|
return context.WithValue(ctx, keyBuffer, buffer)
|
|
}
|
|
|
|
func BufferFromContext(ctx context.Context) *bytes.Buffer {
|
|
v, _ := ctx.Value(keyBuffer).(*bytes.Buffer)
|
|
return v
|
|
}
|
|
|
|
type loggerKey struct{}
|
|
|
|
var (
|
|
keyLogger = &loggerKey{}
|
|
)
|
|
|
|
func ContextWithLogger(ctx context.Context, log logger.Logger) context.Context {
|
|
return context.WithValue(ctx, keyLogger, log)
|
|
}
|
|
|
|
func LoggerFromContext(ctx context.Context) logger.Logger {
|
|
v, _ := ctx.Value(keyLogger).(logger.Logger)
|
|
return v
|
|
}
|