notice

package
v0.3.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 26, 2024 License: AGPL-3.0 Imports: 13 Imported by: 15

Documentation

Index

Constants

View Source
const (
	ModeElement = `element`
	ModeNotify  = `notify`
	ModeModal   = `modal`
	ModeDash    = `-`
)
View Source
const (
	Succeed         = 1
	Failed          = 0
	Unauthenticated = -1
	Forbid          = -2
)
View Source
const (
	StateSuccess = 1
	StateFailure = 0
)
View Source
const AnyClientID = `any`

Variables

View Source
var (
	ErrUserNotOnline     = errors.New(`通知错误:用户不在线`)
	ErrMsgTypeNotAccept  = errors.New(`通知错误:不接受这种消息类型`)
	ErrClientIDNotOnline = errors.New(`通知错误:ClientID不在线`)
	ErrForcedExit        = errors.New(`Forced exit`)
)
View Source
var (
	// DefaultNoticer 默认noticer
	// state > 0 为成功;否则为失败
	DefaultNoticer Noticer = func(message interface{}, state int, progs ...*Progress) error {
		if len(progs) > 0 && progs[0] != nil {
			message = `[ ` + tplfunc.NumberFormat(progs[0].CalcPercent().Percent(), 2) + `% ] ` + fmt.Sprint(message)
		}
		if state > 0 {
			log.Info(message)
		} else {
			log.Error(message)
		}
		return nil
	}

	CustomOutputNoticer CustomWithWriter = func(wOut io.Writer, wErr io.Writer) Noticer {
		return func(message interface{}, state int, progs ...*Progress) error {
			if len(progs) > 0 && progs[0] != nil {
				message = `[ ` + tplfunc.NumberFormat(progs[0].CalcPercent().Percent(), 2) + `% ] ` + fmt.Sprint(message)
			}
			if state > 0 {
				fmt.Fprintln(wOut, message)
			} else {
				fmt.Fprintln(wErr, message)
			}
			return nil
		}
	}
)
View Source
var NoticeMessageChanSize = 3

Functions

func Clear

func Clear()

func CloseClient

func CloseClient(user string, clientID string) bool

func CloseMessage

func CloseMessage(user string, types ...string)

func Default

func Default() *userNotices

func DownloadProxyFn

func DownloadProxyFn(np NProgressor) func(name string, download int, size int64, r io.Reader) io.Reader

func GetClientID

func GetClientID(eCtx echo.Context) string

func GetNoticeID

func GetNoticeID(eCtx echo.Context) string

func GetNoticeMode

func GetNoticeMode(eCtx echo.Context) string

func Initialize

func Initialize()

func IsOnline

func IsOnline(user string) bool

func NewUserNotices

func NewUserNotices(debug bool, users IOnlineUsers) *userNotices

func OnClose

func OnClose(fn ...func(user string)) *userNotices

func OnOpen

func OnOpen(fn ...func(user string)) *userNotices

func OnlineStatus

func OnlineStatus(users ...string) map[string]bool

func OpenMessage

func OpenMessage(user string, types ...string)

func Recv

func Recv(user string, clientID string) <-chan *Message

func Send

func Send(user string, message *Message) error

func SetClientID

func SetClientID(clientID string) func(*HTTPNoticerConfig)

func SetDebug

func SetDebug(on bool)

func SetID

func SetID(id interface{}) func(*HTTPNoticerConfig)

func SetIsExited

func SetIsExited(isExited IsExited) func(*HTTPNoticerConfig)

func SetMode

func SetMode(mode string) func(*HTTPNoticerConfig)

func SetTimeout

func SetTimeout(timeout time.Duration) func(*HTTPNoticerConfig)

func SetType

func SetType(typ string) func(*HTTPNoticerConfig)

func SetUser

func SetUser(user string) func(*HTTPNoticerConfig)

func Stdout

func Stdout(message *Message)

func ToReadCloser

func ToReadCloser(r io.Reader) io.ReadCloser

func ToWriteCloser

func ToWriteCloser(w io.Writer) io.WriteCloser

Types

type Control

type Control struct {
	// contains filtered or unexported fields
}

func (*Control) Exited

func (c *Control) Exited() *Control

func (*Control) IsExited

func (c *Control) IsExited() bool

func (*Control) ListenContextAndTimeout

func (c *Control) ListenContextAndTimeout(ctx context.Context, timeouts ...time.Duration) *Control

type CustomWithWriter

type CustomWithWriter func(wOut io.Writer, wErr io.Writer) Noticer

type HTTPNoticerConfig

type HTTPNoticerConfig struct {
	User     string
	Type     string // Topic
	ClientID string
	ID       interface{}
	IsExited IsExited
	Timeout  time.Duration
	Mode     string // element / notify
}

func NewHTTPNoticerConfig

func NewHTTPNoticerConfig() *HTTPNoticerConfig

func (*HTTPNoticerConfig) Noticer

func (c *HTTPNoticerConfig) Noticer(ctx context.Context) Noticer

func (*HTTPNoticerConfig) SetClientID

func (c *HTTPNoticerConfig) SetClientID(clientID string) *HTTPNoticerConfig

func (*HTTPNoticerConfig) SetID

func (c *HTTPNoticerConfig) SetID(id interface{}) *HTTPNoticerConfig

func (*HTTPNoticerConfig) SetIsExited

func (c *HTTPNoticerConfig) SetIsExited(isExited IsExited) *HTTPNoticerConfig

func (*HTTPNoticerConfig) SetMode

func (c *HTTPNoticerConfig) SetMode(mode string) *HTTPNoticerConfig

func (*HTTPNoticerConfig) SetTimeout

func (*HTTPNoticerConfig) SetType

func (c *HTTPNoticerConfig) SetType(typ string) *HTTPNoticerConfig

func (*HTTPNoticerConfig) SetUser

func (c *HTTPNoticerConfig) SetUser(user string) *HTTPNoticerConfig

type IOnlineUser

type IOnlineUser interface {
	GetUser() string
	HasMessageType(messageTypes ...string) bool
	Send(message *Message, openDebug ...bool) error
	Recv(clientID string) <-chan *Message
	ClearMessage()
	ClearMessageType(types ...string)
	OpenMessageType(types ...string)
	CountType() int
	CountClient() int
	CloseClient(clientID string)
	OpenClient(clientID string)
}

func OpenClient

func OpenClient(user string) (oUser IOnlineUser, clientID string)

type IOnlineUsers

type IOnlineUsers interface {
	GetOk(user string, noLock ...bool) (IOnlineUser, bool)
	OnlineStatus(users ...string) map[string]bool
	Set(user string, oUser IOnlineUser)
	Delete(user string)
	Clear()
}

type IsExited

type IsExited interface {
	IsExited() bool
}

func NewControlWithContext

func NewControlWithContext(ctx context.Context, timeout time.Duration) IsExited

type Message

type Message struct {
	ClientID string        `json:"client_id" xml:"client_id"`
	ID       interface{}   `json:"id" xml:"id"`
	Type     string        `json:"type" xml:"type"`
	Title    string        `json:"title" xml:"title"`
	Status   int           `json:"status" xml:"status"`
	Content  interface{}   `json:"content" xml:"content"`
	Mode     string        `json:"mode" xml:"mode"` //显示模式:notify/element/modal
	Progress *ProgressInfo `json:"progress" xml:"progress"`
}

func NewMessage

func NewMessage() *Message

func NewMessageWithValue

func NewMessageWithValue(typ string, title string, content interface{}, status ...int) *Message

func (*Message) Release

func (m *Message) Release()

func (*Message) SetClientID

func (m *Message) SetClientID(clientID string) *Message

func (*Message) SetContent

func (m *Message) SetContent(content interface{}) *Message

func (*Message) SetID

func (m *Message) SetID(id interface{}) *Message

func (*Message) SetMode

func (m *Message) SetMode(mode string) *Message

func (*Message) SetProgress

func (m *Message) SetProgress(progress *Progress) *Message

func (*Message) SetStatus

func (m *Message) SetStatus(status int) *Message

func (*Message) SetTitle

func (m *Message) SetTitle(title string) *Message

func (*Message) SetType

func (m *Message) SetType(t string) *Message

type MessageWithStatus

type MessageWithStatus struct {
	Message interface{}
	Status  int
}

type NProgressor

type NProgressor interface {
	Notifier
	Progressor
}

type Notice

type Notice struct {
	// contains filtered or unexported fields
}

func NewNotice

func NewNotice() *Notice

func (*Notice) CloseClient

func (a *Notice) CloseClient(clientID string)

func (*Notice) CountClient

func (a *Notice) CountClient() int

func (*Notice) OpenClient

func (a *Notice) OpenClient(clientID string)

type NoticeAndProgress

type NoticeAndProgress struct {
	// contains filtered or unexported fields
}

func NewP

func NewP(eCtx echo.Context, noticeType string, user string, ctx context.Context, opts ...func(*HTTPNoticerConfig)) *NoticeAndProgress

func NewWithProgress

func NewWithProgress(noticer Noticer, progresses ...*Progress) *NoticeAndProgress

func (*NoticeAndProgress) Add

func (*NoticeAndProgress) AutoComplete

func (a *NoticeAndProgress) AutoComplete(on bool) NProgressor

func (*NoticeAndProgress) Callback

func (a *NoticeAndProgress) Callback(total int64, exec func(callback func(strLen int)) error) error

func (*NoticeAndProgress) Complete

func (a *NoticeAndProgress) Complete() NProgressor

func (*NoticeAndProgress) Done

func (a *NoticeAndProgress) Done(n int64) NProgressor

func (*NoticeAndProgress) Failure

func (a *NoticeAndProgress) Failure(message interface{}) error

func (*NoticeAndProgress) ProxyReader

func (p *NoticeAndProgress) ProxyReader(r io.Reader) io.ReadCloser

func (*NoticeAndProgress) ProxyWriter

func (p *NoticeAndProgress) ProxyWriter(w io.Writer) io.WriteCloser

func (*NoticeAndProgress) Reset

func (a *NoticeAndProgress) Reset()

func (*NoticeAndProgress) Send

func (a *NoticeAndProgress) Send(message interface{}, statusCode int) error

func (*NoticeAndProgress) Success

func (a *NoticeAndProgress) Success(message interface{}) error

type NoticeMessager

type NoticeMessager interface {
	Size() int
	Delete(clientID string)
	Clear()
	Add(clientID string)
	Send(message *Message) error
	Recv(clientID string) <-chan *Message
}

type NoticeTyper

type NoticeTyper interface {
	Has(types ...string) bool
	Size() int
	Clear(types ...string)
	Open(types ...string)
}

type Noticer

type Noticer func(message interface{}, state int, progress ...*Progress) error

func MakeNoticer

func MakeNoticer(progress *Progress, msgType string, mode string, id interface{}, clientID string, user string) Noticer

func New

func New(eCtx echo.Context, noticeType string, user string, ctx context.Context, opts ...func(*HTTPNoticerConfig)) Noticer

func NewNoticer

func NewNoticer(ctx context.Context, config *HTTPNoticerConfig) Noticer

func (Noticer) WithProgress

func (noticer Noticer) WithProgress(progresses ...*Progress) *NoticeAndProgress

type Notifier

type Notifier interface {
	Send(message interface{}, statusCode int) error
	Success(message interface{}) error
	Failure(message interface{}) error
}

type OnlineUser

type OnlineUser struct {
	User string
	*Notice
}

func NewOnlineUser

func NewOnlineUser(user string) *OnlineUser

func (*OnlineUser) ClearMessage

func (oUser *OnlineUser) ClearMessage()

func (*OnlineUser) ClearMessageType

func (oUser *OnlineUser) ClearMessageType(types ...string)

func (*OnlineUser) CountType

func (oUser *OnlineUser) CountType() int

func (*OnlineUser) GetUser

func (oUser *OnlineUser) GetUser() string

func (*OnlineUser) HasMessageType

func (oUser *OnlineUser) HasMessageType(messageTypes ...string) bool

func (*OnlineUser) OpenMessageType

func (oUser *OnlineUser) OpenMessageType(types ...string)

func (*OnlineUser) Recv

func (oUser *OnlineUser) Recv(clientID string) <-chan *Message

func (*OnlineUser) Send

func (oUser *OnlineUser) Send(message *Message, openDebug ...bool) error

type OnlineUsers

type OnlineUsers struct {
	// contains filtered or unexported fields
}

func NewOnlineUsers

func NewOnlineUsers() *OnlineUsers

func (*OnlineUsers) Clear

func (o *OnlineUsers) Clear()

func (*OnlineUsers) Delete

func (o *OnlineUsers) Delete(user string)

func (*OnlineUsers) GetOk

func (o *OnlineUsers) GetOk(user string, noLock ...bool) (IOnlineUser, bool)

func (*OnlineUsers) OnlineStatus

func (o *OnlineUsers) OnlineStatus(users ...string) map[string]bool

func (*OnlineUsers) Set

func (o *OnlineUsers) Set(user string, oUser IOnlineUser)

type Progress

type Progress struct {
	// contains filtered or unexported fields
}

func NewProgress

func NewProgress() *Progress

func (*Progress) Add

func (p *Progress) Add(n int64) *Progress

func (*Progress) AutoComplete

func (p *Progress) AutoComplete(on bool) *Progress

func (*Progress) CalcPercent

func (p *Progress) CalcPercent() *Progress

func (*Progress) Callback

func (p *Progress) Callback(total int64, exec func(callback func(strLen int)) error) error

func (*Progress) CloneInfo

func (p *Progress) CloneInfo() ProgressInfo

func (*Progress) Complete

func (p *Progress) Complete() bool

func (*Progress) CopyToInfo

func (p *Progress) CopyToInfo(to *ProgressInfo)

func (*Progress) Done

func (p *Progress) Done(n int64) int64

func (*Progress) Finish

func (p *Progress) Finish() int64

func (*Progress) IsExited

func (p *Progress) IsExited() bool

func (*Progress) Percent

func (p *Progress) Percent() float64

func (*Progress) Reset

func (p *Progress) Reset()

func (*Progress) SetComplete

func (p *Progress) SetComplete() *Progress

func (*Progress) SetControl

func (p *Progress) SetControl(control IsExited) *Progress

func (*Progress) SetPercent

func (p *Progress) SetPercent(percent float64) *Progress

func (*Progress) Total

func (p *Progress) Total() int64

type ProgressInfo

type ProgressInfo struct {
	Total    int64   `json:"total" xml:"total"`
	Finish   int64   `json:"finish" xml:"finish"`
	Percent  float64 `json:"percent" xml:"percent"`
	Complete bool    `json:"complete" xml:"complete"`
}

type Progressor

type Progressor interface {
	Add(n int64) NProgressor
	Done(n int64) NProgressor
	AutoComplete(on bool) NProgressor
	Complete() NProgressor
	Reset()
	ProxyReader(r io.Reader) io.ReadCloser
	ProxyWriter(w io.Writer) io.WriteCloser
	Callback(total int64, exec func(callback func(strLen int)) error) error
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL