Documentation ¶
Overview ¶
GoIM服务相关支持组件
Index ¶
- func CheckUserChat(uid uint, cid uint64) error
- func CreateDervice(der *ImUserDervice, mac map[string]string) error
- func CreateJoins(c *ChatsJoin) error
- func CreateMessage(m *Message) error
- func Heartbeat(der_id uint) error
- func InitUserChat(uid uint) error
- func Regedit(c *Config)
- type Chat
- type ChatFrom
- type ChatUser
- type ChatsJoin
- type Config
- type ImUserDervice
- type ImUserDerviceMac
- type Message
- type MyChatStruct
- type UserFrinds
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CreateDervice ¶
func CreateDervice(der *ImUserDervice, mac map[string]string) error
创建用户的设备ID
der 设备信息,如果该信息中存在ID则表示为修改设备信息,而不再是创建设备 mac 设备MAC地址,只有在设备ID=0时,才会创建设备并连同创建设备关联MAC
Types ¶
type Chat ¶
type Chat struct { Id uint64 `gorm:"column:id;primaryKey;type:BIGINT UNSIGNED;not null;autoIncrement" json:"id" form:"id"` UserId uint `gorm:"column:user_id;type:INT UNSIGNED;comment:创建人" json:"user_id" form:"user_id"` //创建人【群主ID】 TypeId uint8 `` //类型 1-设备间通信 2-用户间通信 3-群聊天 /* 136-byte string literal not displayed */ Thumb uint `gorm:"column:thumb;type:INT UNSIGNED;comment:缩略图" json:"thumb" form:"thumb"` //缩略图 Name string `gorm:"column:name;type:VARCHAR(200);comment:名称" json:"name" form:"name"` //名称 Desc string `gorm:"column:desc;type:VARCHAR(200);comment:简介/公告" json:"desc" form:"desc"` //简介/公告 IsDeleted uint8 `gorm:"column:is_deleted;type:TINYINT UNSIGNED;comment:是否删除 0-正常 1-删除" json:"is_deleted" form:"is_deleted"` //是否删除 0-正常 1-删除 IsSilence uint8 `` //是否禁言 开启禁言后将只允许群主、群管理发言 /* 155-byte string literal not displayed */ CreatedAt string `gorm:"column:created_at;type:DATETIME;comment:创建时间" json:"created_at" form:"created_at"` // 创建时间 }
Chat聊天窗/群/组结构体
type ChatFrom ¶
type ChatFrom struct { Id uint64 `gorm:"column:id;primaryKey;type:BIGINT UNSIGNED;not null;autoIncrement" json:"id" form:"id"` ChatId uint64 `gorm:"column:chat_id;type:BIGINT UNSIGNED;not null;comment:群ID" json:"chat_id" form:"chat_id"` // 所属群ID UserId uint `gorm:"column:user_id;type:INT UNSIGNED;comment:用户ID" json:"user_id" form:"user_id"` //用户ID MessageId uint64 `gorm:"column:message_id;type:BIGINT UNSIGNED;not null;comment:已读的最大消息ID" json:"message_id" form:"message_id"` // 已读消息ID【超过该ID的消息为未读状态】 IsRecently uint8 `` //是否显示在最近聊天列表[删除时即将此值修改为0] /* 127-byte string literal not displayed */ IsTop uint8 `gorm:"column:is_top;type:TINYINT UNSIGNED;comment:是否置顶" json:"is_top" form:"is_top"` //是否置顶[置顶后列表根据置顶群的消息聊天时间进行排序] CreatedAt string `gorm:"column:created_at;type:DATETIME;comment:最近聊天时间" json:"created_at" form:"created_at"` // 最近聊天时间 IsDeleted uint8 `gorm:"column:is_deleted;type:tinyint unsigned;comment:是否删除" form:"is_deleted" json:"is_deleted"` //是否删除 }
群和用户的关联
type ChatUser ¶
type ChatUser struct { Id uint64 `gorm:"column:id;primaryKey;type:BIGINT UNSIGNED;not null;autoIncrement" json:"id" form:"id"` ChatId uint64 `gorm:"column:chat_id;type:BIGINT UNSIGNED;not null" json:"chat_id" form:"chat_id"` // 所属群ID UserId uint `gorm:"column:user_id;type:INT UNSIGNED;comment:用户ID" json:"user_id" form:"user_id"` //用户ID DerviceId uint `` //所属设备ID,仅限设备间通讯使用 /* 131-byte string literal not displayed */ Desc string `gorm:"column:desc;type:VARCHAR(200);comment:群备注,仅自己可见" json:"desc" form:"desc"` //群备注 Nickname string `gorm:"column:nickname;type:VARCHAR(200);comment:群昵称,我在本群的昵称" json:"nickname" form:"nickname"` //群昵称 Thumb uint `gorm:"column:thumb;type:INT UNSIGNED;comment:缩略图" json:"thumb" form:"thumb"` //缩略图 IsManagement uint8 `gorm:"column:is_management;type:TINYINT UNSIGNED;comment:是否是群管理" json:"is_management" form:"is_management"` //是否是群管理 IsUnInterruptions uint8 `` //是否开启免打扰 /* 139-byte string literal not displayed */ IsPack uint8 `gorm:"column:is_pack;type:TINYINT UNSIGNED;comment:是否折叠收起" json:"is_pack" form:"is_pack"` //是否折叠收起 IsBook uint8 `gorm:"column:is_book;type:TINYINT UNSIGNED;comment:是否显示在通讯录" json:"is_book" form:"is_book"` //是否显示在通讯录 IsSilence uint8 `gorm:"column:is_silence;type:TINYINT UNSIGNED;comment:是否禁言" json:"is_silence" form:"is_silence"` //是否禁言 IsDeleted uint8 `gorm:"column:is_deleted;type:tinyint unsigned;comment:是否删除" form:"is_deleted" json:"is_deleted"` //是否删除 CreatedAt string `gorm:"column:created_at;type:DATETIME;comment:创建时间" json:"created_at" form:"created_at"` // 加入时间 }
群成员表
type ChatsJoin ¶ added in v0.2.0
type ChatsJoin struct { Id uint `gorm:"column:id;type:int unsigned;primaryKey;autoIncrement;not null" form:"id" json:"id"` UserId uint `gorm:"column:user_id;type:int unsigned;comment:用户ID" form:"user_id" json:"user_id"` //用户ID JoinId uint `gorm:"column:join_id;type:int unsigned;comment:加入对象ID" form:"join_id" json:"join_id"` //加入对象ID TypeId uint8 `gorm:"column:type_id;type:tinyint unsigned;comment:加入类型 1-好友 2-群 3-邀请进群" form:"type_id" json:"type_id"` //加入类型 1-好友 2-群 3-邀请进群 Status uint8 `` //状态 1-待审核 2-审核忽略 3-审核拒绝 4-审核同意 /* 142-byte string literal not displayed */ CreatedAt string `gorm:"column:created_at;type:datetime;comment:申请时间" form:"created_at" json:"created_at"` //申请时间 AutoAt string `gorm:"column:auto_at;type:datetime;comment:审核时间" form:"auto_at" json:"auto_at"` //审核时间 }
申请加好友、加群
type Config ¶
type Config struct { DB *gorm.DB // 数据库连接 MessageTable string // 用户消息记录表 ChatTable string // 聊天窗表【无论和谁聊天,都需要预先创建Chat聊天窗】 ChatUserTable string // 聊天窗所属成员列表 ChatFromTable string // 聊天窗和用户的关联表,此表定义了每个人的聊天窗中展示的记录 UserDerviceTable string // 用户设备表 UserDerviceMacTable string // 用户设备网卡关联表 UsersFrindsTable string // 用户好友关系表 ChatsJoinTable string // 用户好友申请表 DefaultDerviceThumb uint // 默认设备间通讯的默认图ID DefaultDerviceName string // 默认设备间通讯的群名称 NsqMessageSend string // 消息发送队列通知 GetUserNickname func(uid uint) string // 获取用户昵称 GetUserAvatar func(uid uint) uint // 获取用户头像 }
WebSocket组件,依赖于"github.com/gorilla/websocket"服务库 此处取名为XIM意为直接支持到IM通信 支持:
- 同一用户的多设备通信
- 用户与用户之间的通信
- 多用户的群之间的通信
功能点:
- 设备间通讯
- 用户间通讯
- 群通讯
- 群公告
- 群昵称
- 群备注
- 群免打扰
- 群折叠
- 群管理
- 群禁言
- 群成员禁言(单独禁言某个人)
- 通讯录
- 最近聊天
模块定义
type ImUserDervice ¶
type ImUserDervice struct { Id uint `gorm:"column:id;type:int unsigned;primaryKey;autoIncrement;not null" form:"id" json:"id"` UserId uint `gorm:"column:user_id;type:int unsigned;comment:用户ID" form:"user_id" json:"user_id"` //用户ID Hostname string `gorm:"column:hostname;type:varchar(100);comment:系统主机名(用户名)" form:"hostname" json:"hostname"` //系统主机名(用户名) Goos string `gorm:"column:goos;type:varchar(100);comment:系统名称 linux、drawin等" form:"goos" json:"goos"` //系统名称 linux、drawin等 Arch string `gorm:"column:arch;type:varchar(100);comment:操作系统架构" form:"arch" json:"arch"` //操作系统架构 IsDeleted uint8 `gorm:"column:is_deleted;type:tinyint unsigned;comment:是否删除" form:"is_deleted" json:"is_deleted"` //是否删除 IsLogin uint8 `gorm:"column:is_login;type:tinyint unsigned;comment:是否已登陆" form:"is_login" json:"is_login"` //是否已登录 LastSendTime string `gorm:"column:last_send_time;type:datetime;comment:最后发言/心跳时间" form:"last_send_time" json:"last_send_time"` //最后发言/心跳时间 CreatedAt string `gorm:"column:created_at;type:datetime;comment:添加时间" form:"created_at" json:"created_at"` //添加时间 }
用户设备表
func GetDervice ¶
func GetDervice(uid uint, mac map[string]string) (*ImUserDervice, error)
获取用户的设备ID
uid 用户ID mac 用户设备MAC【H5端获取不到MAC,建议使用{"h5mac":"android/ios/win/linux...:safari/firefox....:720...<屏幕宽度>"}】
type ImUserDerviceMac ¶
type ImUserDerviceMac struct { Id uint `gorm:"column:id;type:int unsigned;primaryKey;autoIncrement;not null" form:"id" json:"id"` UserId uint `gorm:"column:user_id;type:int unsigned;comment:所属用户ID" form:"user_id" json:"user_id"` //所属用户ID DerviceId uint `gorm:"column:dervice_id;type:int unsigned;comment:所属设备ID" form:"dervice_id" json:"dervice_id"` //所属设备ID MacName string `gorm:"column:mac_name;type:varchar(100);comment:设备MAC地址所属名称" form:"mac_name" json:"mac_name"` //设备MAC地址所属设备名称,如:eth0 Mac string `gorm:"column:mac;type:varchar(100);comment:设备MAC地址" form:"mac" json:"mac"` //设备MAC地址 IsDeleted uint8 `gorm:"column:is_deleted;type:tinyint unsigned;comment:是否删除" form:"is_deleted" json:"is_deleted"` //是否删除 CreatedAt string `gorm:"column:created_at;type:datetime;comment:添加时间" form:"created_at" json:"created_at"` //添加时间 }
设备网卡MAC地址
type Message ¶
type Message struct { Id uint64 `gorm:"column:id;primaryKey;type:BIGINT UNSIGNED;not null;autoIncrement" json:"id" form:"id"` ChatId uint64 `gorm:"column:chat_id;type:BIGINT UNSIGNED;not null;comment:群ID" json:"chat_id" form:"chat_id"` // 所属群ID DerviceId uint `gorm:"column:dervice_id;type:int unsigned;comment:所属设备ID" form:"dervice_id" json:"dervice_id"` //所属设备ID UserId uint `gorm:"column:user_id;type:INT UNSIGNED;comment:发信人ID" json:"user_id" form:"user_id"` //发信人ID Type uint8 `gorm:"column:type;type:TINYINT UNSIGNED;comment:消息类型" json:"type" form:"type"` //消息类型 1-普通消息 2-图片消息 3-语音消息 4-视频消息 5-地址消息 Message string `gorm:"column:message;type:VARCHAR(500);comment:消息内容" json:"message" form:"message"` //消息内容,最大限制500字节 Fid uint `gorm:"column:fid;type:INT UNSIGNED;comment:附件ID" json:"fid" form:"fid"` //附件ID 图片/音频/视频文件所属的xfile.ID AddressCity uint `gorm:"column:address_city;type:INT UNSIGNED;comment:省市区ID" json:"address_city" form:"address_city"` //省市区Code Address string `gorm:"column:address;type:VARCHAR(200);comment:地址信息" json:"address" form:"address"` //地址信息 Latitude float64 `json:"latitude" form:"latitude" gorm:"column:latitude;type:double;comment:纬度"` // 纬度 国内数值较小的数字4~53.5 Longitude float64 `json:"longitude" form:"longitude" gorm:"column:longitude;type:double;comment:经度"` // 经度 国内数值较大的数字73.5~135 IsDeleted uint8 `gorm:"column:is_deleted;type:tinyint unsigned;comment:是否删除" form:"is_deleted" json:"is_deleted"` //是否删除 CreatedAt string `gorm:"column:created_at;type:DATETIME;comment:发信时间" json:"created_at" form:"created_at"` // 发信时间 }
消息记录
type MyChatStruct ¶ added in v0.1.35
type MyChatStruct struct { ChatId uint64 `json:"chat_id" form:"chat_id"` // 聊天窗ID Goos string `json:"goos" form:"goos"` // 设备系统【仅限设备间通讯】 Thumb uint `json:"thumb" form:"thumb"` // 群图标ID Desc string `json:"desc" form:"desc"` // 群简介/公告 IsManagement uint8 `json:"is_management" form:"is_management"` // 是否是群管理 IsSilence uint8 `json:"is_silence" form:"is_silence"` // 群是否禁言/我是否被禁言 IsTop uint8 `json:"is_top" form:"is_top"` // 是否置顶 IsUnInterruptions uint8 `json:"is_un_interruptions" form:"is_un_interruptions"` // 是否开启免打扰 Nickname string `json:"nickname" form:"nickname"` // 我在群中的昵称 TypeId uint8 `json:"type_id" form:"type_id"` // 类型 1-设备间通信 2-用户间通信 3-群聊天 Arch string `json:"arch" form:"arch"` // 设备CPU架构【仅限设备间通讯】 DerviceId uint `json:"dervice_id" form:"dervice_id"` // 设备ID【仅限设备间通讯】 Hostname string `json:"hostname" form:"hostname"` // 设备名称【仅限设备间通讯】 MessageId uint64 `json:"message_id" form:"message_id"` // 当前已读消息ID Name string `json:"name" form:"name"` // 群名称/群备注名称 NoRead int64 `json:"no_read" form:"no_read"` // 未读消息数量 }
聊天窗查询的数据结构体信息
type UserFrinds ¶ added in v0.2.0
type UserFrinds struct { Id uint `gorm:"column:id;type:int unsigned;primaryKey;autoIncrement;not null" form:"id" json:"id"` UserId uint `gorm:"column:user_id;type:int unsigned;comment:所属用户ID" form:"user_id" json:"user_id"` //所属用户ID FrindsId uint `gorm:"column:frinds_id;type:int unsigned;comment:好友ID" form:"frinds_id" json:"frinds_id"` //好友ID Desc string `gorm:"column:desc;type:varchar(200);comment:好友备注" form:"desc" json:"desc"` //好友备注 TypeId uint8 `gorm:"column:type_id;type:tinyint unsigned;comment:好友类型 1-好友 2-粉丝" form:"type_id" json:"type_id"` //好友类型 1-好友 2-粉丝 CreatedAt string `gorm:"column:created_at;type:datetime;comment:创建时间" form:"created_at" json:"created_at"` //创建时间 }
IM好友表,IM好友需要建立两条关系,即A的好友B和B的好友A这两条关系;而粉丝不需要
Click to show internal directories.
Click to hide internal directories.