La interfaz de Cliente es utilizada para definir los mecanismos por los cuales los mensajes son enviados al servidor
package comm
type Client interface {
SendMsg(msg []byte) ([]byte, error)
}
Esta interfaz es utilizada desde las funciones encargadas por la comunicación de los agentes
type Agent struct {
client comm.Client
}
func NewAgent(client comm.Client) *Agent {
return &Agent{client: client}
}
func (a *Agent) sendMsg(agentMsg *AgentMsg) (*LPMsg, error) {
var lpMsg LPMsg
msg, err := json.Marshal(agentMsg)
if err != nil {
return nil, err
}
response, err := a.client.SendMsg(msg)
if err != nil {
return nil, err
}
err = json.Unmarshal(response, &lpMsg)
if err != nil {
return nil, err
}
return &lpMsg, nil
}