本文整理汇总了Golang中femebe.Message.Force方法的典型用法代码示例。如果您正苦于以下问题:Golang Message.Force方法的具体用法?Golang Message.Force怎么用?Golang Message.Force使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类femebe.Message
的用法示例。
在下文中一共展示了Message.Force方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: TestStartupSerDes
func TestStartupSerDes(t *testing.T) {
ms, _ := newTestClientStream(t)
var m femebe.Message
s := Startup{Params: make(map[string]string)}
s.Params["hello"] = "world"
s.Params["goodbye"] = "world"
s.Params["glory"] = "spite"
s.FillMessage(&m)
ms.Send(&m)
var deserM femebe.Message
ms.Next(&deserM)
serBytes, _ := m.Force()
deserBytes, _ := deserM.Force()
if !bytes.Equal(serBytes, deserBytes) {
t.Fatal()
}
}
示例2: processLogMsg
// Process a log message, sending it to the client.
func processLogMsg(die dieCh, lpc *logplexc.Client, msgInit msgInit,
sr *serveRecord, exit exitFn) {
var m femebe.Message
for {
// Poll request to exit
select {
case <-die:
return
default:
break
}
msgInit(&m, exit)
// Refuse to handle any log message above an arbitrary
// size. Furthermore, exit the worker, closing the0
// connection, so that the client doesn't even bother
// to wait for this process to drain the oversized
// item and anything following it; these will be
// dropped. It's on the client to gracefully handle
// the error and re-connect after this happens.
if m.Size() > 1*MB {
exit("client %q sent oversized log record")
}
payload, err := m.Force()
if err != nil {
exit("could not retrieve payload of message: %v",
err)
}
var lr logRecord
parseLogRecord(&lr, payload, exit)
processLogRec(&lr, lpc, sr, exit)
}
}
示例3: ReadStartupMessage
func ReadStartupMessage(m *femebe.Message) (*Startup, error) {
var err error
if remainingSz := m.Size() - 4; remainingSz > 10000 {
// Startup packets longer than this are considered
// invalid. Copied from the PostgreSQL source code.
err = ErrTooBig{fmt.Errorf(
"Rejecting oversized startup packet: got %v",
m.Size())}
return nil, err
} else if remainingSz < 4 {
// We expect all initialization messages to
// have at least a 4-byte header
err = ErrWrongSize{
fmt.Errorf(
"Expected message of at least 4 bytes; got %v",
remainingSz)}
return nil, err
}
body, err := m.Force()
if err != nil {
return nil, err
}
var b femebe.Reader
b.InitReader(body)
protoVer, _ := femebe.ReadInt32(&b)
const SUPPORTED_PROTOVER = 0x00030000
if protoVer != SUPPORTED_PROTOVER {
err = ErrStartupVersion{
fmt.Errorf("bad version: got %x expected %x",
protoVer, SUPPORTED_PROTOVER)}
return nil, err
}
params := make(map[string]string)
for remaining := b.Len(); remaining > 1; {
key, err := femebe.ReadCString(&b)
if err != nil {
return nil, err
}
val, err := femebe.ReadCString(&b)
if err != nil {
return nil, err
}
remaining -= len(key) + len(val) + 2 /* null bytes */
params[key] = val
}
// Fidelity check on the startup packet, whereby the last byte
// must be a NUL.
if d, _ := femebe.ReadByte(&b); d != '\000' {
return nil, ErrStartupFmt{
errors.New("malformed startup packet")}
}
return &Startup{params}, nil
}