mirror of
https://github.com/lwch/natpass.git
synced 2024-04-21 12:41:54 +00:00
WIP
This commit is contained in:
@@ -1,9 +1,18 @@
|
||||
package vnc
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"image"
|
||||
"image/draw"
|
||||
"image/jpeg"
|
||||
"natpass/code/client/pool"
|
||||
"natpass/code/network"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/lwch/logging"
|
||||
"github.com/lwch/runtime"
|
||||
)
|
||||
|
||||
func (v *VNC) WS(pool *pool.Pool, w http.ResponseWriter, r *http.Request) {
|
||||
@@ -14,9 +23,33 @@ func (v *VNC) WS(pool *pool.Pool, w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
ch := conn.ChanRead(id)
|
||||
defer conn.SendDisconnect(v.link.target, v.link.targetIdx, v.link.id)
|
||||
for {
|
||||
msg := <-ch
|
||||
// logging.Info("%s", msg.String())
|
||||
_ = msg
|
||||
switch msg.GetXType() {
|
||||
case network.Msg_vnc_image:
|
||||
data, err := decodeImage(msg.GetVimg())
|
||||
runtime.Assert(err)
|
||||
logging.Info("%d", len(data))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func decodeImage(data *network.VncImage) ([]byte, error) {
|
||||
switch data.GetEncode() {
|
||||
case network.VncImage_raw:
|
||||
return data.GetData(), nil
|
||||
case network.VncImage_jpeg:
|
||||
img, err := jpeg.Decode(bytes.NewReader(data.GetData()))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
rect := img.Bounds()
|
||||
raw := image.NewRGBA(rect)
|
||||
draw.Draw(raw, rect, img, rect.Min, draw.Src)
|
||||
return raw.Pix, nil
|
||||
case network.VncImage_png:
|
||||
// TODO
|
||||
}
|
||||
return nil, errors.New("unsupported")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user