修复投影仪控制

This commit is contained in:
2025-03-05 11:03:19 +08:00
parent 363047c078
commit c71e8bc13d
18 changed files with 598 additions and 399 deletions

View File

@@ -32,11 +32,11 @@ func NewClient(host, port, password, id string) *Client {
}
}
func (c *Client) Connect() error {
func (c *Client) connect() error {
address := net.JoinHostPort(c.Host, c.Port)
conn, err := net.DialTimeout("tcp", address, 5*time.Second)
if err != nil {
return err
return fmt.Errorf("连接异常: %w", err)
}
c.conn = conn
@@ -44,14 +44,14 @@ func (c *Client) Connect() error {
reader := bufio.NewReader(c.conn)
response, err := reader.ReadString('\r')
if err != nil {
c.Close()
return err
c.close()
return fmt.Errorf("读取异常: %w", err)
}
// Handle authentication
if strings.HasPrefix(response, "PJLINK 1") {
if c.Password == "" {
c.Close()
c.close()
return ErrAuthFailed
}
@@ -62,13 +62,13 @@ func (c *Client) Connect() error {
_, err = fmt.Fprintf(c.conn, "%s\r", authHash)
if err != nil {
c.Close()
return err
c.close()
return fmt.Errorf("写入异常: %w", err)
}
authResponse, err := reader.ReadString('\r')
if err != nil || !strings.Contains(authResponse, "OK") {
c.Close()
c.close()
return ErrAuthFailed
}
}
@@ -104,36 +104,54 @@ func (c *Client) sendCommand(command string) (string, error) {
return "", ErrAuthFailed
} else if result == "ERR2" {
return "", ErrCommandError
} else if result == "ERR3" {
return "YES", nil
}
return result, nil
}
func (c *Client) PowerOn() error {
func (c *Client) PowerOn() (string, error) {
err := c.connect()
if err != nil {
return "", fmt.Errorf("连接异常: %w", err)
}
defer c.close()
response, err := c.sendCommand("POWR 1")
if err != nil {
return err
return "", err
}
if response != "OK" {
return fmt.Errorf("unexpected response: %s", response)
if response == "YES" {
return response, nil
} else if response != "OK" {
return response, fmt.Errorf("unexpected response: %s", response)
}
return nil
return response, nil
}
func (c *Client) PowerOff() error {
func (c *Client) PowerOff() (string, error) {
err := c.connect()
if err != nil {
return "", fmt.Errorf("连接异常: %w", err)
}
defer c.close()
response, err := c.sendCommand("POWR 0")
if err != nil {
return err
return "", err
}
if response != "OK" {
return fmt.Errorf("unexpected response: %s", response)
if response == "YES" {
return response, nil
} else if response != "OK" {
return response, fmt.Errorf("unexpected response: %s", response)
}
return nil
return response, nil
}
func (c *Client) Close() {
func (c *Client) close() {
if c.conn != nil {
c.conn.Close()
c.conn = nil