本文整理匯總了Golang中carrier/protocol.Message類的典型用法代碼示例。如果您正苦於以下問題:Golang Message類的具體用法?Golang Message怎麽用?Golang Message使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了Message類的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: MSetCommand
func MSetCommand(cmd command.Command, msg protocol.Message) (msgAck protocol.Message) {
var elements []protocol.Message = msg.GetArraysValue()
if msg.GetIntegersValue()%2 != 1 {
return protocol.NewMessageString(protocol.ERR_wrong_number_command, cmd.Name())
}
var (
keyIndex int64
hashSlot uint16
classification map[uint16]protocol.Message = make(map[uint16]protocol.Message)
msgSpice protocol.Message
ok bool
)
for keyIndex = 1; keyIndex < msg.GetIntegersValue(); keyIndex += 2 {
hashSlot = crc16.HashSlot(elements[keyIndex].GetBytesValue())
if msgSpice, ok = classification[hashSlot]; !ok {
msgSpice = protocol.NewMessage().AppendArraysValue(elements[0])
}
classification[hashSlot] = msgSpice.AppendArraysValue(elements[keyIndex]).AppendArraysValue(elements[keyIndex+1])
}
// 按slot分命令
var node nodes.Nodes
for hashSlot, msgSpice = range classification {
if node, ok = cluster.GetClusterParameter().GetSlot(hashSlot); !ok {
logger.Warningf("獲取不到slot節點: %d", hashSlot)
continue
}
forwardMsg(msgSpice, node, cmd.CheckReadonly())
}
return protocol.OK
}
示例2: TestNullBulkStrings
func (msg *MessageTest) TestNullBulkStrings(c *C) {
var (
buf *bytes.Buffer = bytes.NewBufferString("$-1\r\n")
br *bufio.Reader = bufio.NewReader(buf)
pmsg protocol.Message = protocol.NewMessage()
err error
)
err = pmsg.ReadOne(br)
c.Assert(err, IsNil)
// c.Error(pmsg)
}
示例3: TestNullElementsArrays
func (msg *MessageTest) TestNullElementsArrays(c *C) {
var (
buf *bytes.Buffer = bytes.NewBufferString("*3\r\n$3\r\nfoo\r\n$-1\r\n$3\r\nbar\r\n")
br *bufio.Reader = bufio.NewReader(buf)
pmsg protocol.Message = protocol.NewMessage()
err error
)
err = pmsg.ReadOne(br)
c.Assert(err, IsNil)
// c.Error(pmsg)
}
示例4: TestMultiArrays
func (msg *MessageTest) TestMultiArrays(c *C) {
var (
buf *bytes.Buffer = bytes.NewBufferString("*2\r\n*3\r\n:1\r\n:2\r\n:3\r\n*2\r\n+Foo\r\n-Bar\r\n")
br *bufio.Reader = bufio.NewReader(buf)
pmsg protocol.Message = protocol.NewMessage()
err error
)
err = pmsg.ReadOne(br)
c.Assert(err, IsNil)
// c.Error(pmsg)
}
示例5: TestIntegersBulkStringArrays
func (msg *MessageTest) TestIntegersBulkStringArrays(c *C) {
var (
buf *bytes.Buffer = bytes.NewBufferString("*5\r\n:1\r\n:2\r\n:3\r\n:4\r\n$6\r\nfoobar\r\n")
br *bufio.Reader = bufio.NewReader(buf)
pmsg protocol.Message = protocol.NewMessage()
err error
)
err = pmsg.ReadOne(br)
c.Assert(err, IsNil)
// c.Error(pmsg)
}
示例6: HandelMessage
func (conn *conn) HandelMessage(msg protocol.Message) (msgAck protocol.Message, err error) {
conn.c.SetWriteDeadline(time.Now().Add(conn.writeTimeout))
if err = msg.WriteOne(conn.bw); err != nil {
return
}
conn.c.SetReadDeadline(time.Now().Add(conn.readTimeout))
msgAck = protocol.NewMessage()
if err = msgAck.ReadOne(conn.br); err != nil {
return
}
return
}
示例7: ProcKeyCommand
func ProcKeyCommand(cmd command.Command, msg protocol.Message) (msgAck protocol.Message) {
var (
slot uint16 = crc16.HashSlot(msg.GetArraysValue()[1].GetBytesValue()) // 第一個參數是Key
node nodes.Nodes
ok bool
)
if node, ok = cluster.GetClusterParameter().GetSlot(slot); !ok {
logger.Warningf("獲取不到slot節點: %d", slot)
return protocol.ERR_ClusterSlots
}
return forwardMsg(msg, node, cmd.CheckReadonly())
}
示例8: DelCommand
func DelCommand(cmd command.Command, msg protocol.Message) (msgAck protocol.Message) {
var (
elements []protocol.Message = msg.GetArraysValue()
element protocol.Message
hashSlot uint16
classification map[uint16]protocol.Message = make(map[uint16]protocol.Message)
msgSpice protocol.Message
ok bool
)
for _, element = range elements[1:] {
hashSlot = crc16.HashSlot(element.GetBytesValue())
if msgSpice, ok = classification[hashSlot]; !ok {
msgSpice = protocol.NewMessage().AppendArraysValue(elements[0])
}
classification[hashSlot] = msgSpice.AppendArraysValue(element)
}
// 按slot分命令
var (
node nodes.Nodes
msgAckSplit protocol.Message
)
msgAck = protocol.NewMessage()
for hashSlot, msgSpice = range classification {
if node, ok = cluster.GetClusterParameter().GetSlot(hashSlot); !ok {
logger.Warningf("獲取不到slot節點: %d", hashSlot)
continue
}
msgAckSplit = forwardMsg(msgSpice, node, cmd.CheckReadonly())
msgAck.AppendIntegersValue(msgAckSplit)
}
return
}
示例9: main
func main() {
c := commands.NewCommandTree()
c.AddCommand([]byte("aBcD"), commands.NewCommand())
fmt.Println(c.SearchCommand([]byte("ABCD")))
fmt.Println(c.SearchCommand([]byte("AbCD")))
fmt.Println(c.SearchCommand([]byte("ABCd")))
fmt.Println(c.SearchCommand([]byte("ABC")))
for i := 'a'; i <= 'z'; i++ {
j := util.ToUpper(byte(i))
k := util.ToLower(j)
fmt.Println(i, j, k)
}
return
socketClent, err := socket.NewTClientSocket("10.10.10.227:6679")
// socketClent, err := socket.NewTClientSocket("127.0.0.1:6679")
fmt.Println(socketClent, err)
conn, err := socketClent.DialTimeout(time.Duration(3 * time.Second))
fmt.Println(conn, err)
var (
br *bufio.Reader = bufio.NewReader(conn)
bw *bufio.Writer = bufio.NewWriter(conn)
msgAck protocol.Message = protocol.NewMessage()
)
// 發數據
var rawBytes []byte = []byte("*1\r\n$4\r\nINFO\r\n")
//var rawBytes []byte = []byte{42, 50, 13, 10, 36, 55, 13, 10, 99, 108, 117, 115, 116, 101, 114, 13, 10, 36, 53, 13, 10, 115, 108, 111, 116, 115, 13, 10}
//var rawBytes []byte = []byte("*2\r\n$7\r\nCLUSTER\r\n$5\r\nSLOTS\r\n")
fmt.Println(string(rawBytes))
if _, err = bw.Write(rawBytes); err != nil {
fmt.Println(err)
return
}
bw.Flush()
// 收數據
if err = msgAck.ReadOne(br); err != nil {
fmt.Println(err)
}
fmt.Println(msgAck)
}
示例10: ProcessCommand
func ProcessCommand(msg protocol.Message) protocol.Message {
var (
name []byte
argc int64
cmd command.Command
ok bool
)
switch msg.GetProtocolType() {
case protocol.ArraysType:
if argc = msg.GetIntegersValue(); argc > 0 {
name = msg.GetArraysValue()[0].GetBytesValue()
}
}
if cmd, ok = commandSet.SearchCommand(name); !ok {
return protocol.NewMessageString(protocol.ERR_unknown_command, name)
}
if !cmd.CheckArgc(argc) {
return protocol.NewMessageString(protocol.ERR_wrong_number_command, cmd.Name())
}
if cmd.CheckForbidden() {
return protocol.NewMessageString(protocol.ERR_forbidden_command, cmd.Name())
}
return cmd.Proc(cmd, msg)
}
示例11: PingCommand
func PingCommand(cmd command.Command, msg protocol.Message) protocol.Message {
if msg.GetIntegersValue() > 2 {
return protocol.NewMessageString(protocol.ERR_wrong_number_command, cmd.Name())
}
if msg.GetIntegersValue() == 2 {
return msg.GetArraysValue()[1]
}
return protocol.PONG
}
示例12: sendMessage
func (conn *conn) sendMessage(msg protocol.Message) (err error) {
err = msg.WriteOne(conn.bw)
conn.error(err, "sendMessage 出錯")
return
}
示例13: EchoCommand
func EchoCommand(cmd command.Command, msg protocol.Message) protocol.Message {
return msg.GetArraysValue()[1]
}
示例14: refresh
func (c *cluster) refresh(server string) (err error) {
var (
connPool connection.Pool = c.GetNodePool(server)
conn connection.Conn
slotsMsgAck protocol.Message
)
if conn, err = connPool.Get(); err != nil {
return
}
// 發送cluster slots
if slotsMsgAck, err = conn.HandelMessage(protocol.ClusterSlots); err != nil {
connPool.Remove(conn)
return
}
connPool.Put(conn)
// 處理返回值
if slotsMsgAck.GetProtocolType() != protocol.ArraysType || slotsMsgAck.GetIntegersValue() <= 0 {
return fmt.Errorf("slots數據無效")
}
var slotsMsgAckValue protocol.Message
for _, slotsMsgAckValue = range slotsMsgAck.GetArraysValue() {
if slotsMsgAckValue.GetProtocolType() != protocol.ArraysType || slotsMsgAckValue.GetIntegersValue() < 3 {
return fmt.Errorf("slots節點數據無效")
}
var (
slotsMsgAckValueArrays []protocol.Message = slotsMsgAckValue.GetArraysValue()
nodeMsgValue protocol.Message
nodeMsgValueArrays []protocol.Message
connPoolList []connection.Pool
)
if slotsMsgAckValueArrays[0].GetProtocolType() != protocol.IntegersType || slotsMsgAckValueArrays[1].GetProtocolType() != protocol.IntegersType {
return fmt.Errorf("slots節點起始或者結束數據無效")
}
for _, nodeMsgValue = range slotsMsgAckValueArrays[2:] {
if nodeMsgValue.GetProtocolType() != protocol.ArraysType || nodeMsgValue.GetIntegersValue() < 2 {
return fmt.Errorf("slot節點數據無效")
}
nodeMsgValueArrays = nodeMsgValue.GetArraysValue()
if nodeMsgValueArrays[0].GetProtocolType() != protocol.BulkStringsType {
return fmt.Errorf("slot節點IP無效")
}
if nodeMsgValueArrays[1].GetProtocolType() != protocol.IntegersType {
return fmt.Errorf("slot節點PORT無效")
}
connPoolList = append(
connPoolList,
c.GetNodePool(fmt.Sprintf("%s:%d", nodeMsgValueArrays[0].GetBytesValue(), nodeMsgValueArrays[1].GetIntegersValue())),
)
}
c.clusterSlots.AddSlots(
slotsMsgAckValueArrays[0].GetIntegersValue(),
slotsMsgAckValueArrays[1].GetIntegersValue(),
nodes.NewNodes().Set(connPoolList), // TODO 同一個List用同一個Nodes
)
}
return
}
示例15: MGetCommand
func MGetCommand(cmd command.Command, msg protocol.Message) (msgAck protocol.Message) {
var (
elements []protocol.Message = msg.GetArraysValue()
element protocol.Message
hashSlot uint16
classification map[uint16]protocol.Message = make(map[uint16]protocol.Message)
msgSpice protocol.Message
ok bool
)
for _, element = range elements[1:] {
hashSlot = crc16.HashSlot(element.GetBytesValue())
if msgSpice, ok = classification[hashSlot]; !ok {
msgSpice = protocol.NewMessage().AppendArraysValue(elements[0])
}
classification[hashSlot] = msgSpice.AppendArraysValue(element)
}
// 按slot分命令
var (
node nodes.Nodes
msgAckSplit protocol.Message
msgAckMap map[protocol.Message]protocol.Message = make(map[protocol.Message]protocol.Message)
msgKey int
msgValue protocol.Message
)
for hashSlot, msgSpice = range classification {
if node, ok = cluster.GetClusterParameter().GetSlot(hashSlot); !ok {
logger.Warningf("獲取不到slot節點: %d", hashSlot)
continue
}
msgAckSplit = forwardMsg(msgSpice, node, cmd.CheckReadonly())
if msgAckSplit.GetProtocolType() != protocol.ArraysType {
logger.Warningf("命令結果預期不符: %v", msgSpice)
continue
}
if msgSpice.GetIntegersValue()-1 != msgAckSplit.GetIntegersValue() {
logger.Warningf("命令結果預期不符: %v", msgSpice)
continue
}
for msgKey, msgValue = range msgSpice.GetArraysValue()[1:] {
msgAckMap[msgValue] = msgAckSplit.GetArraysValue()[msgKey]
}
}
// 整合結果
msgAck = protocol.NewMessage()
for _, element = range elements[1:] {
if msgValue, ok = msgAckMap[element]; ok {
msgAck.AppendArraysValue(msgAckMap[element])
} else {
msgAck.AppendArraysValue(protocol.NullBulkString)
}
}
return
}