Closed RyanCode closed 1 year ago
// mainLoop reads messages sent from the server and routes them to the // proper channels for users of the client to read. func (c *ClientConn) mainLoop() { defer c.Close() reader := &common.RfbReadHelper{Reader: c.conn, Listeners: c.Listeners} // Build the map of available server messages typeMap := make(map[uint8]common.ServerMessage) defaultMessages := []common.ServerMessage{ new(MsgFramebufferUpdate), new(MsgSetColorMapEntries), new(MsgBell), new(MsgServerCutText), new(MsgServerFence), } for _, msg := range defaultMessages { typeMap[msg.Type()] = msg } if c.config.ServerMessages != nil { for _, msg := range c.config.ServerMessages { typeMap[msg.Type()] = msg } } defer func() { logger.Warn("ClientConn.MainLoop: exiting!") c.Listeners.Consume(&common.RfbSegment{ SegmentType: common.SegmentConnectionClosed, }) }() for { var messageType uint8 if err := binary.Read(c.conn, binary.BigEndian, &messageType); err != nil { logger.Errorf("ClientConn.MainLoop: error reading messagetype, %s", err) break } msg, ok := typeMap[messageType] if !ok { logger.Errorf("ClientConn.MainLoop: bad message type, %d", messageType) // Unsupported message type! Bad! break } logger.Debugf("ClientConn.MainLoop: got ServerMessage:%s", common.ServerMessageType(messageType)) reader.SendMessageStart(common.ServerMessageType(messageType)) reader.PublishBytes([]byte{byte(messageType)}) parsedMsg, err := msg.Read(c, reader) if err != nil { logger.Errorf("ClientConn.MainLoop: error parsing message, %s", err) break } logger.Debugf("ClientConn.MainLoop: read & parsed ServerMessage:%d, %s", parsedMsg.Type(), parsedMsg) } }
after parsedMsg, err := msg.Read(c, reader),not send this msg to listeners.why? only a type?
after parsedMsg, err := msg.Read(c, reader),not send this msg to listeners.why? only a type?