49 lines
1.3 KiB
Go
49 lines
1.3 KiB
Go
package command
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
jsoniter "github.com/json-iterator/go"
|
|
"github.com/yaoapp/kun/log"
|
|
)
|
|
|
|
// NewContext create a new context
|
|
func NewContext(sid, payload string) Context {
|
|
ctx := Context{Context: context.Background(), Sid: sid}
|
|
if payload == "" {
|
|
return ctx
|
|
}
|
|
|
|
err := jsoniter.Unmarshal([]byte(payload), &ctx)
|
|
if err != nil {
|
|
log.Error("%s", err.Error())
|
|
}
|
|
return ctx
|
|
}
|
|
|
|
// NewContextWithCancel create a new context with cancel
|
|
func NewContextWithCancel(sid, payload string) (Context, context.CancelFunc) {
|
|
ctx := NewContext(sid, payload)
|
|
return ContextWithCancel(ctx)
|
|
}
|
|
|
|
// NewContextWithTimeout create a new context with timeout
|
|
func NewContextWithTimeout(sid, payload string, timeout time.Duration) (Context, context.CancelFunc) {
|
|
ctx := NewContext(sid, payload)
|
|
return ContextWithTimeout(ctx, timeout)
|
|
}
|
|
|
|
// ContextWithCancel create a new context
|
|
func ContextWithCancel(parent Context) (Context, context.CancelFunc) {
|
|
new, cancel := context.WithCancel(parent.Context)
|
|
parent.Context = new
|
|
return parent, cancel
|
|
}
|
|
|
|
// ContextWithTimeout create a new context
|
|
func ContextWithTimeout(parent Context, timeout time.Duration) (Context, context.CancelFunc) {
|
|
new, cancel := context.WithTimeout(parent.Context, timeout)
|
|
parent.Context = new
|
|
return parent, cancel
|
|
}
|