mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
76 lines
1.3 KiB
Go
76 lines
1.3 KiB
Go
|
package webrtc
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/binary"
|
||
|
|
||
|
"demodesk/neko/internal/types"
|
||
|
"demodesk/neko/internal/utils"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
OP_CURSOR_POSITION = 0x01
|
||
|
OP_CURSOR_IMAGE = 0x02
|
||
|
)
|
||
|
|
||
|
type PayloadCursorPosition struct {
|
||
|
PayloadHeader
|
||
|
X uint16
|
||
|
Y uint16
|
||
|
}
|
||
|
|
||
|
type PayloadCursorImage struct {
|
||
|
PayloadHeader
|
||
|
Width uint16
|
||
|
Height uint16
|
||
|
Xhot uint16
|
||
|
Yhot uint16
|
||
|
Uri string
|
||
|
}
|
||
|
|
||
|
func (webrtc_peer *WebRTCPeerCtx) SendCursorPosition(x, y int) error {
|
||
|
if webrtc_peer.dataChannel == nil {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
data := PayloadCursorPosition{
|
||
|
PayloadHeader: PayloadHeader{
|
||
|
Event: OP_CURSOR_POSITION,
|
||
|
Length: 7,
|
||
|
},
|
||
|
X: uint16(x),
|
||
|
Y: uint16(y),
|
||
|
}
|
||
|
|
||
|
var buffer bytes.Buffer
|
||
|
binary.Write(&buffer, binary.LittleEndian, data)
|
||
|
return webrtc_peer.dataChannel.Send(buffer.Bytes())
|
||
|
}
|
||
|
|
||
|
func (webrtc_peer *WebRTCPeerCtx) SendCursorImage(cur *types.CursorImage) error {
|
||
|
if webrtc_peer.dataChannel == nil {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
uri, err := utils.GetCursorImageURI(cur)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
data := PayloadCursorImage{
|
||
|
PayloadHeader: PayloadHeader{
|
||
|
Event: OP_CURSOR_IMAGE,
|
||
|
Length: uint16(11 + len(uri)),
|
||
|
},
|
||
|
Width: cur.Width,
|
||
|
Height: cur.Height,
|
||
|
Xhot: cur.Xhot,
|
||
|
Yhot: cur.Yhot,
|
||
|
Uri: uri,
|
||
|
}
|
||
|
|
||
|
var buffer bytes.Buffer
|
||
|
binary.Write(&buffer, binary.LittleEndian, data)
|
||
|
return webrtc_peer.dataChannel.Send(buffer.Bytes())
|
||
|
}
|