| 124 | } |
| 125 | |
| 126 | func (p *PsyNetRPC) buildMessage(headers map[string]string, body interface{}) (string, error) { |
| 127 | var message strings.Builder |
| 128 | var jsonData []byte |
| 129 | |
| 130 | if body != nil { |
| 131 | var err error |
| 132 | jsonData, err = json.Marshal(body) |
| 133 | if err != nil { |
| 134 | return "", fmt.Errorf("failed to marshal body: %w", err) |
| 135 | } |
| 136 | |
| 137 | headers["PsySig"] = generatePsySig(jsonData) |
| 138 | } |
| 139 | |
| 140 | for key, value := range headers { |
| 141 | message.WriteString(fmt.Sprintf("%s: %s\r\n", key, value)) |
| 142 | } |
| 143 | |
| 144 | message.WriteString("\r\n") |
| 145 | message.Write(jsonData) |
| 146 | |
| 147 | return message.String(), nil |
| 148 | } |
| 149 | |
| 150 | func (p *PsyNetRPC) schedulePing() { |
| 151 | p.mu.Lock() |