converge/pkg/comms/events.go

98 lines
1.5 KiB
Go

package comms
import (
"encoding/gob"
"os"
"os/user"
"runtime"
"time"
)
const PROTOCOL_VERSION = 1
func init() {
RegisterEventsWithGob()
}
// Client to server events
type AgentInfo struct {
Username string
Hostname string
Pwd string
OS string
}
type ClientInfo struct {
ClientId int
}
type SessionInfo struct {
// "ssh", "sftp"
SessionType string
}
type ExpiryTimeUpdate struct {
ExpiryTime time.Time
}
type HeartBeat struct {
// Empty
}
// Message sent from converge server to agent
type ProtocolVersion struct {
Version int
}
type UserPassword struct {
Username string
Password string
}
type ServerInfo struct {
UserPassword UserPassword
}
// Generic wrapper message required to send messages of arbitrary type
type ConvergeMessage struct {
Value interface{}
}
func NewAgentInfo() AgentInfo {
username, _ := user.Current()
host, _ := os.Hostname()
pwd, _ := os.Getwd()
return AgentInfo{
Username: username.Username,
Hostname: host,
Pwd: pwd,
OS: runtime.GOOS,
}
}
func NewSessionInfo(sessionType string) SessionInfo {
return SessionInfo{SessionType: sessionType}
}
func NewExpiryTimeUpdate(expiryTime time.Time) ExpiryTimeUpdate {
return ExpiryTimeUpdate{ExpiryTime: expiryTime}
}
func RegisterEventsWithGob() {
// Agent to ConvergeServer
gob.Register(AgentInfo{})
gob.Register(SessionInfo{})
gob.Register(ExpiryTimeUpdate{})
gob.Register(HeartBeat{})
// ConvergeServer to Agent
gob.Register(ProtocolVersion{})
gob.Register(UserPassword{})
// Wrapper event.
gob.Register(ConvergeMessage{})
}