Documentation ¶
Overview ¶
4byte(packagehead)+4byte(packagetype)+4byte(packagelength)+data(protobuf)+4byte(CRC32) 包格式
Index ¶
- Constants
- Variables
- func Beat(uid uint64)
- func CreateServer(connString string)
- func DatabaseLog(messages ...interface{})
- func GenRandom() uint32
- func GetCommand(packet *Packet) (cmd *protocol.Command, err error)
- func GetInterfaceCMD(data []byte) (cmd *business.Command, err error)
- func ImBusinessLog(messages ...interface{})
- func ImCountbeatLog(messages ...interface{})
- func ImMaxSession(messages ...interface{})
- func ImPacketInTime(messages ...interface{})
- func ImPacketOutTime(messages ...interface{})
- func ImServerLog(messages ...interface{})
- func ImUserLog(messages ...interface{})
- func MakeToken() string
- func MergeSort(s1 []string, s2 []string, res1 *[]string, res2 *[]string, secondBegin int, ...)
- func QuickSort(s1 []string, s2 []string, low int, high int)
- type FeedBackInServer
- type InterfaceForProject
- func (self *InterfaceForProject) CloseDialog(interfaceCMD *business.Command) (resultPacket Packet, err error)
- func (self *InterfaceForProject) CreateGroup(interfaceCMD *business.Command) (resultPacket Packet, err error)
- func (self *InterfaceForProject) InqueryHistory(interfaceCMD *business.Command) (resultPacket Packet, err error)
- func (self *InterfaceForProject) LeaveGroup(interfaceCMD *business.Command) (resultPacket Packet, err error)
- func (self *InterfaceForProject) LogIn(interfaceCMD *business.Command) (resultPacket Packet, err error)
- func (self *InterfaceForProject) LogOut(interfaceCMD *business.Command) (resultPacket Packet, err error)
- func (self *InterfaceForProject) PushMessage(interfaceCMD *business.Command) (resultPacket Packet, err error)
- type Packet
- type PacketAndTime
- type PacketReader
- type PacketWriter
- type Server
- type Session
- func (self *Session) GetBeatCount() int32
- func (self *Session) GetConn() net.Conn
- func (self *Session) GetUid() uint64
- func (self *Session) Listen()
- func (self *Session) Read()
- func (self *Session) SetBeatCount(beatCount int32)
- func (self *Session) SetConn(conn net.Conn)
- func (self *Session) SetUid(uid uint64)
- func (self *Session) Write()
- type Token
- type TotalStruct
Constants ¶
View Source
const ( Packethead = 0x56565656 //PacketBufSize = 1024 MaxPacketLength = 0x00ffffff )
View Source
const ( MaxDelayTime = 60 //服务器发出公钥 30s内没收到正确的回馈包则会关闭conn APPKEY = string("appkeyismartin") //和客户端统一好的appkey MaxOutLineMsg = 200 )
View Source
const (
BusinessKey = string("IamBusinessLayer") //作为AES加密Key
)
Variables ¶
View Source
var ( ErrorMysql = errors.New("mysql err!") ErrorDataTransfer = errors.New("packet data protobuf transfer error!") //protobuf解析出错 ErrorDataLength = errors.New("packet was too long!") //data长度过长 ErrorPacketHead = errors.New("packet error!") //头错 ErrorDataCRC = errors.New("CRC32 error!") ErrorGetOneError = errors.New("GetOne from FeedBackInServerTable error!") )
View Source
var ( PublicMess = &protocol.Message{ Data: proto.String(`-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCbmNv4mBsuPb4xzuUwT2TxEbjG va76zLrF//NRiUKV/T8mKtfv/R+Q+7FGwYkZbDNl5bO0UF0MR69u8ZE1cBAzn74z JGqQVs9QrRgp3VTYM/9s8nOvogcz6+l1amEY+djV3iztHOxyptl1Eq8d3r82kcwf ybxRlNMfwNhT7VpvqQIDAQAB -----END PUBLIC KEY-----`), } PublicCMD = &protocol.Command{ Sender: proto.Uint64(0), Receiver: proto.Uint64(0), Message: PublicMess, } )
********Type=0: IM->Client : 发送公钥********不加密
View Source
var MaxMemberInGroup int //这里设置一个群的成员最大数
View Source
var MaxRecendTimes int //最大重发次数
View Source
var MaxSession int
View Source
var PacketBufSize int
var Packethead int
View Source
var SessionTable map[uint64]*Session //存在线用户的session
View Source
var TokenTime int //令牌有效时间,单位秒
View Source
var UserTable map[uint64]Token // 存在线用户,存token,以及token有效状态
********Tables in RAM var FeedBackInServerTable map[uint32]PacketAndTime //等待回馈包的表
Functions ¶
func DatabaseLog ¶
func DatabaseLog(messages ...interface{})
func GetCommand ¶
********拆分包结构//客户端读取公钥和random********
func ImBusinessLog ¶
func ImBusinessLog(messages ...interface{})
func ImCountbeatLog ¶
func ImCountbeatLog(messages ...interface{})
func ImMaxSession ¶
func ImMaxSession(messages ...interface{})
func ImPacketOutTime ¶
func ImPacketOutTime(messages ...interface{})
func ImServerLog ¶
func ImServerLog(messages ...interface{})
func ImSessionLog(messages ...interface{}) { var year, month, day = time.Now().Date() var LogPath = "./log/" + strconv.Itoa(year) + "/" + month.String() + "/" + strconv.Itoa(day) + "/" err := os.MkdirAll(LogPath, 0777) if err != nil { fmt.Println(err) return } imsessionlog, err := os.OpenFile(LogPath+"imSession.log", os.O_RDWR|os.O_APPEND|os.O_CREATE, 0777) if err != nil { fmt.Println(err) return } defer imsessionlog.Close() sessionlog := log.New(imsessionlog, "\r\n", log.Ldate|log.Ltime) sessionlog.Println(messages) }
func ImSessionErrLog(messages ...interface{}) { year, month, day := time.Now().Date() var LogPath = "./log/" + strconv.Itoa(year) + "/" + month.String() + "/" + strconv.Itoa(day) + "/" err := os.MkdirAll(LogPath, 0777) if err != nil { fmt.Println(err) return } imsessionlog, err := os.OpenFile(LogPath+"imSessionErr.log", os.O_RDWR|os.O_APPEND|os.O_CREATE, 0777) if err != nil { fmt.Println(err) return } defer imsessionlog.Close() sessionlog := log.New(imsessionlog, "\r\n", log.Ldate|log.Ltime) sessionlog.Println(messages) }
func ImUserLog ¶
func ImUserLog(messages ...interface{})
10.4:日志保留(1.平常用户登录登出记录,表的变化;2.IM错误(server+session+packetio);3.数据库操作(主要记录错误))
Types ¶
type FeedBackInServer ¶
type FeedBackInServer struct { FeedBackInServerTable map[uint32]PacketAndTime // contains filtered or unexported fields }
var FeedBack FeedBackInServer
func (*FeedBackInServer) AddOne ¶
func (f *FeedBackInServer) AddOne(random uint32, packetAndTime PacketAndTime)
func (*FeedBackInServer) DeleteOne ¶
func (f *FeedBackInServer) DeleteOne(random uint32)
func (*FeedBackInServer) GetAll ¶
func (f *FeedBackInServer) GetAll() (random []uint32, packetAndTime []PacketAndTime)
func (*FeedBackInServer) GetOne ¶
func (f *FeedBackInServer) GetOne(random uint32) (PacketAndTime, error)
type InterfaceForProject ¶
type InterfaceForProject struct {
InterfaceDB imdatabase.ImDb
}
func (*InterfaceForProject) CloseDialog ¶
func (self *InterfaceForProject) CloseDialog(interfaceCMD *business.Command) (resultPacket Packet, err error)
func (*InterfaceForProject) CreateGroup ¶
func (self *InterfaceForProject) CreateGroup(interfaceCMD *business.Command) (resultPacket Packet, err error)
func (*InterfaceForProject) InqueryHistory ¶
func (self *InterfaceForProject) InqueryHistory(interfaceCMD *business.Command) (resultPacket Packet, err error)
func (*InterfaceForProject) LeaveGroup ¶
func (self *InterfaceForProject) LeaveGroup(interfaceCMD *business.Command) (resultPacket Packet, err error)
func (*InterfaceForProject) LogIn ¶
func (self *InterfaceForProject) LogIn(interfaceCMD *business.Command) (resultPacket Packet, err error)
func (*InterfaceForProject) LogOut ¶
func (self *InterfaceForProject) LogOut(interfaceCMD *business.Command) (resultPacket Packet, err error)
func (*InterfaceForProject) PushMessage ¶
func (self *InterfaceForProject) PushMessage(interfaceCMD *business.Command) (resultPacket Packet, err error)
type Packet ¶
type Packet struct {
// contains filtered or unexported fields
}
********Packet 属性********
type PacketAndTime ¶
type PacketReader ¶
type PacketReader struct { AESKEY []byte // contains filtered or unexported fields }
------------------------------------------ ********PacketReader 属性********
func NewPacketReader ¶
func NewPacketReader(readConn net.Conn) *PacketReader
********新建PacketReader********
func (*PacketReader) ReadPacket ¶
func (p *PacketReader) ReadPacket() (Packet *Packet, err error)
********读取整个包********
type PacketWriter ¶
type PacketWriter struct { AESKEY []byte // contains filtered or unexported fields }
------------------------------------------ ********PacketWriter 属性********
func NewPacketWriter ¶
func NewPacketWriter(writeConn net.Conn) *PacketWriter
********新建PacketWriter********
func (*PacketWriter) WritePacket ¶
func (w *PacketWriter) WritePacket(packet *Packet, rsaPublicKey []byte) error
********写包********
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
********Server 属性
func (*Server) DelOutLineMessage ¶
func (self *Server) DelOutLineMessage()
type Session ¶
type Session struct {
// contains filtered or unexported fields
}
********Session 属性
func CreateSession ¶
func CreateSession(conns net.Conn, imDB imdatabase.ImDb) *Session
func (*Session) GetBeatCount ¶
func (*Session) SetBeatCount ¶
type TotalStruct ¶
type TotalStruct struct { Total int // contains filtered or unexported fields }
var TotalConn TotalStruct
func (*TotalStruct) Abstract ¶
func (t *TotalStruct) Abstract()
func (*TotalStruct) Add ¶
func (t *TotalStruct) Add()
func (*TotalStruct) GetTotal ¶
func (t *TotalStruct) GetTotal() int
Source Files ¶
Click to show internal directories.
Click to hide internal directories.