Skip to content

Instantly share code, notes, and snippets.

@aquatiko
Last active July 22, 2020 06:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aquatiko/becfab954ff1a0925efc03502e7dbaf9 to your computer and use it in GitHub Desktop.
Save aquatiko/becfab954ff1a0925efc03502e7dbaf9 to your computer and use it in GitHub Desktop.
Server file which need to run on laptop for screen-latency-testing
package main
import (
"bufio"
"bytes"
"fmt"
"net"
"os/exec"
"strconv"
"time"
"github.com/go-vgo/robotgo"
)
func main() {
fmt.Println("Start server...")
ln, _ := net.Listen("tcp", "127.0.0.1:")
_, serverPort, _ := net.SplitHostPort(ln.Addr().String())
fmt.Println("Listening on address:")
fmt.Println(ln.Addr())
cmd := exec.Command("adb", "shell", "am", "start", "-n",
"com.android.example.camera2.slowmo/com.example.android.camera2.slowmo.CameraActivity",
"--es", "port "+serverPort)
// error logging and execution for cmd
var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
err := cmd.Run()
if err != nil {
fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
return
}
fmt.Println("Result: " + out.String())
cmd2 := exec.Command("adb", "reverse", "tcp:"+serverPort, "tcp:"+serverPort)
// error logging and execution for cmd2
var out2 bytes.Buffer
var stderr2 bytes.Buffer
cmd2.Stdout = &out2
cmd2.Stderr = &stderr2
err2 := cmd2.Run()
if err2 != nil {
fmt.Println(fmt.Sprint(err2) + ": " + stderr2.String())
return
}
fmt.Println("Result: " + out2.String())
// accept connection
conn, _ := ln.Accept()
fmt.Println("Got connection from:")
fmt.Println(conn.LocalAddr().String())
// serverReader := bufio.NewReader(os.Stdin)
hostReader := bufio.NewReader(conn)
var cache [12]string
counter := 0
// fmt.Print("Text to send: ")
// text, _ := serverReader.ReadString('\n')
// // send to server
// fmt.Fprintf(conn, text)
message, _ := hostReader.ReadString('*') // using * as delim and hardcoded in app to append * at end of message
fmt.Println(message)
if message == "started capture*" {
cache[counter] = strconv.Itoa(int(time.Now().UnixNano() / 1000000))
counter++
time.Sleep(1 * time.Second)
for i := 0; i < 10; i++ {
robotgo.TypeStr("m")
cache[counter] = strconv.Itoa(int(time.Now().UnixNano() / 1000000))
counter++
time.Sleep(100 * time.Millisecond)
}
}
fmt.Println("Key simulation ended")
message, _ = hostReader.ReadString('*') // using * as delim and hardcoded in app to append * at end of message
fmt.Println(message)
if message == "send cache*" {
//time.Sleep(1 * time.Second)
for i := 0; i < counter; i++ {
fmt.Fprint(conn, cache[i]+"\n")
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment