Implemented the 'peer ping' command by establishing an IPC mechanism between the CLI and the running 'node serve' process. - Added 'ControlService' in 'pkg/node' exposing RPC methods over a Unix socket. - Implemented 'MessageDispatcher' to route P2P messages to 'Controller' (responses) or 'Worker' (requests). - Updated 'node serve' to start the IPC server and use the dispatcher. - Updated 'peer ping' to use the IPC client to request pings from the running node. - Fixed broken 'pkg/node/dispatcher.go' file.
29 lines
816 B
Go
29 lines
816 B
Go
package node
|
|
|
|
// MessageDispatcher routes messages to either Controller or Worker
|
|
type MessageDispatcher struct {
|
|
controller *Controller
|
|
worker *Worker
|
|
}
|
|
|
|
// NewMessageDispatcher creates a new MessageDispatcher
|
|
func NewMessageDispatcher(controller *Controller, worker *Worker) *MessageDispatcher {
|
|
return &MessageDispatcher{
|
|
controller: controller,
|
|
worker: worker,
|
|
}
|
|
}
|
|
|
|
// Dispatch routes incoming messages to the appropriate handler
|
|
func (d *MessageDispatcher) Dispatch(conn *PeerConnection, msg *Message) {
|
|
// If ReplyTo is set, it's a response to a request initiated by Controller
|
|
if msg.ReplyTo != "" && d.controller != nil {
|
|
d.controller.HandleResponse(conn, msg)
|
|
return
|
|
}
|
|
|
|
// Otherwise treat it as a new request for Worker
|
|
if d.worker != nil {
|
|
d.worker.HandleMessage(conn, msg)
|
|
}
|
|
}
|