130 lines
2.8 KiB
Go
130 lines
2.8 KiB
Go
//go:build (linux && cgo) || (darwin && cgo)
|
|
|
|
package mmaputils
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/ESilva15/goirsdk/sharedMem"
|
|
)
|
|
|
|
type utils struct {
|
|
socketPath string
|
|
listener *net.UnixConn
|
|
}
|
|
|
|
func newUtils() (*utils, error) {
|
|
return &utils{}, nil
|
|
}
|
|
|
|
func (u *utils) Close() {
|
|
if u.listener != nil {
|
|
u.listener.Close()
|
|
os.Remove(u.socketPath)
|
|
}
|
|
}
|
|
|
|
// OpenMemMap returns a Reader interface that can be used to read the data
|
|
// No need to encapsulate it
|
|
func OpenMemMap(name string, size uint32) (Reader, error) {
|
|
file, err := sharedMem.Open(name, size)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to open `%s` with err: %+v", name, err)
|
|
}
|
|
|
|
return file, nil
|
|
}
|
|
|
|
// OpenEvent creates or connects to a Unix socket for event signaling on Linux
|
|
func (u *utils) OpenEvent(eventName string) error {
|
|
u.socketPath = fmt.Sprintf("/tmp/iracing_%s.sock", eventName)
|
|
_ = os.Remove(u.socketPath)
|
|
|
|
addr, err := net.ResolveUnixAddr("unixgram", u.socketPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
l, err := net.ListenUnixgram("unixgram", addr)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
u.listener = l
|
|
return nil
|
|
}
|
|
|
|
func (u *utils) OpenBroadcastChannel(name string) error {
|
|
// No-op or log stub on Linux
|
|
return nil
|
|
}
|
|
|
|
// CheckValidDataEvent waits for a pulse byte sent over the socket
|
|
func (u *utils) CheckValidDataEvent(timeout time.Duration) bool {
|
|
if u.listener == nil {
|
|
return false
|
|
}
|
|
|
|
_ = u.listener.SetReadDeadline(time.Now().Add(timeout))
|
|
buf := make([]byte, 1)
|
|
_, err := u.listener.Read(buf)
|
|
return err == nil
|
|
}
|
|
|
|
func (u *utils) SendBroadcastMessage(id, p1, p2 uintptr) error {
|
|
return nil
|
|
}
|
|
|
|
// package winutils
|
|
//
|
|
// import (
|
|
// "errors"
|
|
// "sync"
|
|
// "time"
|
|
// )
|
|
//
|
|
// const (
|
|
// WAIT_OBJECT_0 = 0
|
|
// WAIT_TIMEOUT = 258
|
|
// )
|
|
//
|
|
// var (
|
|
// once sync.Once
|
|
// ErrUnsupportedOS = errors.New("not found")
|
|
// )
|
|
//
|
|
// type utils struct {
|
|
// }
|
|
//
|
|
// // INITIALIZATION
|
|
// func newUtils() (*utils, error) {
|
|
// return nil, ErrUnsupportedOS
|
|
// }
|
|
//
|
|
// func (u *utils) Close() {
|
|
// }
|
|
//
|
|
// // openEvent opens a windows.Handle for a given event
|
|
// func (u *utils) OpenEvent(eventName string) error {
|
|
// return ErrUnsupportedOS
|
|
// }
|
|
//
|
|
// // OpenBroadcastChannel opens up a broadcast channel to send commands to iracing
|
|
// func (u *utils) OpenBroadcastChannel(name string) error {
|
|
// return ErrUnsupportedOS
|
|
// }
|
|
//
|
|
// // INITIALIZATION
|
|
//
|
|
// // openEvent waits for a good response for some given time
|
|
// func (u *utils) CheckValidDataEvent(timeout time.Duration) bool {
|
|
// return false
|
|
// }
|
|
//
|
|
// // SendBroadcastMessage sends a message trough the broadcast channel
|
|
// func (u *utils) SendBroadcastMessage(id, p1, p2 uintptr) error {
|
|
// return ErrUnsupportedOS
|
|
// }
|