我是靠谱客的博主 含蓄美女,最近开发中收集的这篇文章主要介绍gobelieve php,protocol.go,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

/**

* Copyright (c) 2014-2015, GoBelieve

* All rights reserved.

*

* This program is free software; you can redistribute it and/or modify

* it under the terms of the GNU General Public License as published by

* the Free Software Foundation; either version 2 of the License, or

* (at your option) any later version.

*

* This program is distributed in the hope that it will be useful,

* but WITHOUT ANY WARRANTY; without even the implied warranty of

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

* GNU General Public License for more details.

*

* You should have received a copy of the GNU General Public License

* along with this program; if not, write to the Free Software

* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

*/

package main

import "io"

import "bytes"

import "encoding/binary"

import log "github.com/golang/glog"

import "errors"

//平台号

const PLATFORM_IOS = 1

const PLATFORM_ANDROID = 2

const PLATFORM_WEB = 3

const DEFAULT_VERSION = 1

const MSG_HEADER_SIZE = 12

var message_descriptions map[int]string = make(map[int]string)

type MessageCreator func()IMessage

var message_creators map[int]MessageCreator = make(map[int]MessageCreator)

type VersionMessageCreator func()IVersionMessage

var vmessage_creators map[int]VersionMessageCreator = make(map[int]VersionMessageCreator)

func WriteHeader(len int32, seq int32, cmd byte, version byte, buffer io.Writer) {

binary.Write(buffer, binary.BigEndian, len)

binary.Write(buffer, binary.BigEndian, seq)

t := []byte{cmd, byte(version), 0, 0}

buffer.Write(t)

}

func ReadHeader(buff []byte) (int, int, int, int) {

var length int32

var seq int32

buffer := bytes.NewBuffer(buff)

binary.Read(buffer, binary.BigEndian, &length)

binary.Read(buffer, binary.BigEndian, &seq)

cmd, _ := buffer.ReadByte()

version, _ := buffer.ReadByte()

return int(length), int(seq), int(cmd), int(version)

}

func WriteMessage(w *bytes.Buffer, msg *Message) {

body := msg.ToData()

WriteHeader(int32(len(body)), int32(msg.seq), byte(msg.cmd), byte(msg.version), w)

w.Write(body)

}

func SendMessage(conn io.Writer, msg *Message) error {

buffer := new(bytes.Buffer)

WriteMessage(buffer, msg)

buf := buffer.Bytes()

n, err := conn.Write(buf)

if err != nil {

log.Info("sock write error:", err)

return err

}

if n != len(buf) {

log.Infof("write less:%d %d", n, len(buf))

return errors.New("write less")

}

return nil

}

func ReceiveLimitMessage(conn io.Reader, limit_size int) *Message {

buff := make([]byte, 12)

_, err := io.ReadFull(conn, buff)

if err != nil {

log.Info("sock read error:", err)

return nil

}

length, seq, cmd, version := ReadHeader(buff)

if length < 0 || length >= limit_size {

log.Info("invalid len:", length)

return nil

}

buff = make([]byte, length)

_, err = io.ReadFull(conn, buff)

if err != nil {

log.Info("sock read error:", err)

return nil

}

message := new(Message)

message.cmd = cmd

message.seq = seq

message.version = version

if !message.FromData(buff) {

log.Warning("parse error")

return nil

}

return message

}

func ReceiveMessage(conn io.Reader) *Message {

return ReceiveLimitMessage(conn, 32*1024)

}

//消息大小限制在1M

func ReceiveStorageMessage(conn io.Reader) *Message {

return ReceiveLimitMessage(conn, 1024*1024)

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

最后

以上就是含蓄美女为你收集整理的gobelieve php,protocol.go的全部内容,希望文章能够帮你解决gobelieve php,protocol.go所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部