ws

package
v0.7.0 Latest Latest
Warning

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

Go to latest
Published: Jun 19, 2020 License: MIT Imports: 7 Imported by: 0

Documentation

Overview

Copyright 2019-2020 Axetroy. All rights reserved. MIT license.

Copyright 2019-2020 Axetroy. All rights reserved. MIT license.

Copyright 2019-2020 Axetroy. All rights reserved. MIT license.

Copyright 2019-2020 Axetroy. All rights reserved. MIT license.

Index

Constants

This section is empty.

Variables

View Source
var (
	UserPoll   = NewPool()
	WaiterPoll = NewPool()
)
View Source
var MatcherPool = NewMatcher()

Functions

This section is empty.

Types

type AuthPayload added in v0.7.0

type AuthPayload struct {
	Token string `json:"token" validate:"required,min=0" comment:"身份令牌"`
}

type Client

type Client struct {
	sync.RWMutex

	UUID string // Socket 连接的唯一标识符

	LatestReceiveAt time.Time // 最近接收到的消息的时间,用于判断用户是否空闲
	Closed          bool      // 连接是否已关闭
	Ready           bool      // 该客户端是否已准备就绪,给客服端用的,ready  = true 的时候系统才会分配用户
	// contains filtered or unexported fields
}

func NewClient

func NewClient(conn *websocket.Conn) *Client

func (*Client) Close

func (c *Client) Close() error

关闭连接

func (*Client) GetProfile

func (c *Client) GetProfile() *schema.ProfilePublic

func (*Client) RegenerateUUID added in v0.7.0

func (c *Client) RegenerateUUID()

func (*Client) SetReady added in v0.7.0

func (c *Client) SetReady(ready bool)

func (*Client) UpdateProfile

func (c *Client) UpdateProfile(profile schema.ProfilePublic)

func (*Client) WriteError

func (c *Client) WriteError(err error, data Message) error

func (*Client) WriteJSON

func (c *Client) WriteJSON(data Message) error

向客户端写数据

type Matcher

type Matcher struct {
	sync.RWMutex
	Broadcast chan bool // 调度器,当收到通知时,就安排客服接待排队的用户
	Max       int       // 一个客服最多接待多少个用户
	// contains filtered or unexported fields
}

func NewMatcher

func NewMatcher() *Matcher

func (*Matcher) AddWaiter

func (c *Matcher) AddWaiter(waiterSocketUUID string)

添加客服

func (*Matcher) GetIdleWaiter

func (c *Matcher) GetIdleWaiter() *string

获取当前最空闲的客服

func (*Matcher) GetMatcher

func (c *Matcher) GetMatcher() map[string][]string

func (*Matcher) GetMyUsers

func (c *Matcher) GetMyUsers(waiterSocketUUID string) []string

获取这个客服当前服务的用户

func (*Matcher) GetMyWaiter

func (c *Matcher) GetMyWaiter(userSocketUUID string) *string

获取当前接待我的客服

func (*Matcher) GetPendingLength

func (c *Matcher) GetPendingLength() int

func (*Matcher) GetPendingQueue added in v0.7.0

func (c *Matcher) GetPendingQueue() []string

func (*Matcher) Join

func (c *Matcher) Join(userSocketUUID string, prepend ...bool) (*string, uint)

用户加入匹配池 返回接待的客服 UUID 如果返回空,那么说明没有找到合适的客服,加入等待队列 第二个参数用于插入到最前面的队列,出于最优先级 返回 int 代表出于队列的地 n 位

func (*Matcher) Leave

func (c *Matcher) Leave(userSocketUUID string)

用户离开匹配池

func (*Matcher) RemoveWaiter

func (c *Matcher) RemoveWaiter(waiterSocketUUID string)

移除客服

func (*Matcher) SetUserClientFunc added in v0.7.0

func (c *Matcher) SetUserClientFunc(fn func(id string) *Client)

func (*Matcher) SetWaiterClientFunc added in v0.7.0

func (c *Matcher) SetWaiterClientFunc(fn func(id string) *Client)

func (*Matcher) ShiftPending

func (c *Matcher) ShiftPending() *string

type Message

type Message struct {
	Id      string      `json:"id,omitempty" validate:"omitempty" comment:"消息 ID"`        // 每条消息的 ID,在写入数据库之后会有
	From    string      `json:"from,omitempty" validate:"omitempty,uuid" comment:"发送者"`   // 从谁发出来的
	To      string      `json:"to,omitempty" validate:"omitempty,uuid" comment:"发送目标"`    // 要发送的目标 ID,只有客服才需要带 target 字段,指明发送给谁
	Type    string      `json:"type" validate:"required" comment:"会话类型"`                  // 会话类型
	Payload interface{} `json:"payload,omitempty" validate:"omitempty" comment:"消息数据"`    // 本次消息的数据
	Date    string      `json:"date,omitempty" validate:"omitempty" comment:"时间戳"`        // 消息的时间
	OpID    *string     `json:"op_id,omitempty" validate:"omitempty,uuid" comment:"操作ID"` // 客户端发送的 UUID 用于标记该消息,服务端应该返回相同的 op_id,主要用于消息回执
}

来回传输的消息体

type MessageImagePayload added in v0.7.0

type MessageImagePayload struct {
	Image string `json:"image" validate:"required,url,max=255" comment:"图片URL"`
}

type MessageTextPayload added in v0.7.0

type MessageTextPayload struct {
	Text string `json:"text" validate:"required,max=255" comment:"消息体"`
}

type Pool

type Pool struct {
	sync.RWMutex

	Broadcast chan Message // 广播频道
	// contains filtered or unexported fields
}

func NewPool

func NewPool() *Pool

func (*Pool) Add

func (c *Pool) Add(client *Client)

添加一个连接

func (*Pool) Get

func (c *Pool) Get(UUID string) *Client

获取连接

func (*Pool) GetWaiterFromUserID added in v0.7.0

func (c *Pool) GetWaiterFromUserID(UserID string) (list []*Client)

获取连接

func (*Pool) Length

func (c *Pool) Length() int

获取连接长度

func (*Pool) Remove

func (c *Pool) Remove(UUID string)

删除连接

type QueuePayload added in v0.7.0

type QueuePayload struct {
	Location uint `json:"location" validate:"required,int,min=0" comment:"位置"`
}

type RatePayload added in v0.7.0

type RatePayload struct {
	Rate uint `json:"rate" validate:"required,int,min=1,max=5" comment:"评分"`
}

type TypeRequestUser

type TypeRequestUser typeForWriteMessage // 用户发出的消息类型
const (
	TypeRequestUserAuth         TypeRequestUser = "auth"          // 认证帐号
	TypeRequestUserConnect      TypeRequestUser = "connect"       // 请求连接一个客服
	TypeRequestUserDisconnect   TypeRequestUser = "disconnect"    // 请求和客服断开连接
	TypeRequestUserMessageText  TypeRequestUser = "message_text"  // 发送文本消息
	TypeRequestUserMessageImage TypeRequestUser = "message_image" // 发送图片
	TypeRequestUserGetHistory   TypeRequestUser = "get_history"   // 请求获取用户聊天记录,应该返回 `message_history`
	TypeRequestUserRate         TypeRequestUser = "rate"          // 对于本次会话进行评价
)

用户可以发出的消息类型

func (TypeRequestUser) String added in v0.7.0

func (c TypeRequestUser) String() string

type TypeRequestWaiter

type TypeRequestWaiter typeForWriteMessage // 客服发出的消息类型
const (
	TypeRequestWaiterAuth              TypeRequestWaiter = "auth"                // 身份认证
	TypeResponseWaiterAuthSuccess      TypeRequestWaiter = "auth_success"        // 身份认证
	TypeRequestWaiterReady             TypeRequestWaiter = "ready"               // 客服已准备就绪,可以开始接收客人
	TypeRequestWaiterUnReady           TypeRequestWaiter = "unready"             // 客服进入未就绪状态,意味着客服暂停接客
	TypeRequestWaiterMessageText       TypeRequestWaiter = "message_text"        // 客服发出文本消息
	TypeRequestWaiterMessageImage      TypeRequestWaiter = "message_image"       // 客服发出图片
	TypeRequestWaiterDisconnect        TypeRequestWaiter = "disconnect"          // 请求断开连接
	TypeRequestWaiterGetHistory        TypeRequestWaiter = "get_history"         // 请求获取用户聊天记录,应该返回 `message_history`, 需要指定 payload
	TypeRequestWaiterGetHistorySession TypeRequestWaiter = "get_history_session" // 请求获取客服的会话记录,应该返回 `session_history`
	TypeRequestWaiterRate              TypeRequestWaiter = "rate"                // 客服发送评分的操作
)

客服发出的消息类型

func (TypeRequestWaiter) String added in v0.7.0

func (c TypeRequestWaiter) String() string

type TypeResponseUser

type TypeResponseUser typeForWriteMessage // 输出给用户的消息类型
const (
	TypeResponseUserAuthSuccess         TypeResponseUser = "auth_success"          // 初始化,告诉用户当前的链接 ID
	TypeResponseUserNotConnect          TypeResponseUser = "not_connect"           // 尚未连接
	TypeResponseUserConnectSuccess      TypeResponseUser = "connect_success"       // 连接成功,现在可以开始对话
	TypeResponseUserMessageHistory      TypeResponseUser = "message_history"       // 用户的聊天记录
	TypeResponseUserDisconnected        TypeResponseUser = "disconnected"          // 客服与用户断开连接
	TypeResponseUserConnectQueue        TypeResponseUser = "connect_queue"         // 正在排队,请等待
	TypeResponseUserMessageText         TypeResponseUser = "message_text"          // 用户收到文本消息
	TypeResponseUserMessageTextSuccess  TypeResponseUser = "message_text_success"  // message_text 的回执
	TypeResponseUserMessageImage        TypeResponseUser = "message_image"         // 用户收到的图片
	TypeResponseUserMessageImageSuccess TypeResponseUser = "message_image_success" // message_image 的回执
	TypeResponseUserIdle                TypeResponseUser = "idle"                  // 当前连接出于空闲状态
	TypeResponseUserError               TypeResponseUser = "error"                 // 用户收到一个错误
	TypeResponseUserRate                TypeResponseUser = "rate"                  // 对于本次会话的评分
	TypeResponseUserRateSuccess         TypeResponseUser = "rate_success"          // 用户评分之后的回执
)

用户收到的类型

func (TypeResponseUser) String added in v0.7.0

func (c TypeResponseUser) String() string

type TypeResponseWaiter

type TypeResponseWaiter typeForWriteMessage // 输出给客服的消息类型
const (
	TypeResponseWaiterMessageText         TypeResponseWaiter = "message_text"          // 客服收到文本消息
	TypeResponseWaiterMessageTextSuccess  TypeResponseWaiter = "message_text_success"  // message_text 成功的回执
	TypeResponseWaiterMessageImage        TypeResponseWaiter = "message_image"         // 客服收到的图片
	TypeResponseWaiterMessageImageSuccess TypeResponseWaiter = "message_image_success" // message_image 成功的回执
	TypeResponseWaiterNewConnection       TypeResponseWaiter = "new_connection"        // 有新连接
	TypeResponseWaiterDisconnected        TypeResponseWaiter = "disconnected"          // 有新连接断开
	TypeResponseWaiterKickOut             TypeResponseWaiter = "kickout"               // 被踢下线
	TypeResponseWaiterUnready             TypeResponseWaiter = "unready"               // 客服进入未就绪状态
	TypeResponseWaiterMessageHistory      TypeResponseWaiter = "message_history"       // 用户的聊天记录
	TypeResponseWaiterSessionHistory      TypeResponseWaiter = "session_history"       // 客服的会话记录
	TypeResponseWaiterRateSuccess         TypeResponseWaiter = "rate_success"          // 客服发起评分之后的回执
	TypeResponseWaiterRateUserSuccess     TypeResponseWaiter = "rate_user_success"     // 用户评分之后的回执
	TypeResponseWaiterError               TypeResponseWaiter = "error"                 // 有新连接断开
)

客服收到的消息

func (TypeResponseWaiter) String added in v0.7.0

func (c TypeResponseWaiter) String() string

Jump to

Keyboard shortcuts

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