本文整理汇总了Golang中github.com/andres-erbsen/chatterbox/transport.Conn类的典型用法代码示例。如果您正苦于以下问题:Golang Conn类的具体用法?Golang Conn怎么用?Golang Conn使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Conn类的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: WriteProtobuf
func WriteProtobuf(conn *transport.Conn, message *proto.ClientToServer) error {
unpadMsg, err := protobuf.Marshal(message)
if err != nil {
return err
}
_, err = conn.WriteFrame(proto.Pad(unpadMsg, proto.SERVER_MESSAGE_SIZE))
return err
}
示例2: writeProtobuf
func writeProtobuf(conn *transport.Conn, outBuf []byte, message *proto.ClientToServer, t *testing.T) {
unpadMsg, err := protobuf.Marshal(message)
handleError(err, t)
padMsg := proto.Pad(unpadMsg, proto.SERVER_MESSAGE_SIZE)
copy(outBuf, padMsg)
conn.WriteFrame(outBuf[:proto.SERVER_MESSAGE_SIZE])
}
示例3: writeProtobuf
func (server *Server) writeProtobuf(conn *transport.Conn, outBuf []byte, message *proto.ServerToClient) error {
unpadMsg, err := protobuf.Marshal(message)
if err != nil {
return err
}
padMsg := proto.Pad(unpadMsg, proto.SERVER_MESSAGE_SIZE)
copy(outBuf, padMsg)
conn.WriteFrame(outBuf[:proto.SERVER_MESSAGE_SIZE])
return nil
}
示例4: Put
func (cc *ConnectionCache) Put(k string, conn *transport.Conn) {
cc.Lock()
ch, ok := cc.connections[k]
if !ok {
ch = make(chan *transport.Conn, 1)
cc.connections[k] = ch
}
cc.Unlock()
select {
case ch <- conn:
default:
conn.Close()
}
return
}
示例5: receiveProtobuf
func receiveProtobuf(conn *transport.Conn, inBuf []byte, t *testing.T) *proto.ServerToClient {
response := new(proto.ServerToClient)
conn.SetDeadline(time.Now().Add(time.Second))
num, err := conn.ReadFrame(inBuf)
handleError(err, t)
unpadMsg := proto.Unpad(inBuf[:num])
if err := response.Unmarshal(unpadMsg); err != nil {
t.Error(err)
}
if response.Status == nil {
t.Error("Server returned nil status.")
}
if *response.Status == proto.ServerToClient_PARSE_ERROR {
t.Error("Server threw a parse error.")
}
return response
}
示例6: ReceiveProtobuf
func ReceiveProtobuf(conn *transport.Conn, inBuf []byte) (*proto.ServerToClient, error) {
response := new(proto.ServerToClient)
conn.SetDeadline(time.Now().Add(time.Hour))
num, err := conn.ReadFrame(inBuf)
if err != nil {
return nil, err
}
unpadMsg := proto.Unpad(inBuf[:num])
if err := response.Unmarshal(unpadMsg); err != nil {
return nil, err
}
if response.Status == nil {
return nil, errors.New("Server returned nil status.")
}
if *response.Status != proto.ServerToClient_OK {
return nil, errors.New("Server did not return OK")
}
return response, nil
}
示例7: readClientCommands
// readClientCommands reads client commands from a connnection and sends them
// to channel commands. On error, the error is sent to channel disconnect and
// both channels (but not the connection are closed).
// commands is a TWO-WAY channel! the reader must reach return each cmd after
// interpreting it, readClientCommands will call cmd.Reset() and reuse it.
func (server *Server) readClientCommands(conn *transport.Conn,
commands chan *proto.ClientToServer, disconnected chan error) {
defer server.wg.Done()
defer close(commands)
defer close(disconnected)
inBuf := make([]byte, proto.SERVER_MESSAGE_SIZE)
cmd := new(proto.ClientToServer)
for {
num, err := conn.ReadFrame(inBuf)
if err != nil {
disconnected <- err
return
}
unpadMsg := proto.Unpad(inBuf[:num])
if err := cmd.Unmarshal(unpadMsg); err != nil {
disconnected <- err
return
}
commands <- cmd
cmd = <-commands
cmd.Reset()
}
}