fork download
  1. package main
  2.  
  3. import (
  4. "flag"
  5. "fmt"
  6. "github.com/gorilla/websocket"
  7. "io/ioutil"
  8. "log"
  9. "net/url"
  10. "os"
  11. "os/signal"
  12. "time"
  13. )
  14.  
  15. var (
  16. argv struct {
  17. host string
  18. key string
  19. help bool
  20. }
  21. )
  22.  
  23. func processArgs() (needStop bool) {
  24. needStop = true
  25.  
  26. if argv.help {
  27. flag.Usage()
  28. } else if len(argv.host) == 0 {
  29. fmt.Fprintln(os.Stderr, "Hey! -host is required")
  30. flag.Usage()
  31. } else if len(argv.key) == 0 {
  32. fmt.Fprintln(os.Stderr, "Hey! -key is required")
  33. flag.Usage()
  34. } else {
  35. needStop = false
  36. }
  37.  
  38. return
  39. }
  40.  
  41. func init() {
  42. flag.StringVar(&argv.host, `host`, ``, `streaming api host. REQUIRED`)
  43. flag.StringVar(&argv.key, `key`, ``, `client key. REQUIRED`)
  44. flag.BoolVar(&argv.help, `h`, false, `show this help`)
  45.  
  46. flag.Parse()
  47. }
  48.  
  49. func main() {
  50. if processArgs() {
  51. return
  52. }
  53.  
  54. u := url.URL{Scheme: "wss", Host: argv.host, Path: "/stream/", RawQuery: "key=" + argv.key}
  55. log.Printf("connecting to %s\n", u.String())
  56. c, wsResp, err := websocket.DefaultDialer.Dial(u.String(), nil)
  57. if err != nil {
  58. if err == websocket.ErrBadHandshake {
  59. log.Printf("handshake failed with status %d\n", wsResp.StatusCode)
  60. bodyBuf, _ := ioutil.ReadAll(wsResp.Body)
  61. log.Println("respBody:", string(bodyBuf))
  62. }
  63. log.Fatal("dial error:", err)
  64. }
  65. log.Println("connection established")
  66. defer c.Close()
  67.  
  68. done := make(chan struct{})
  69. defer close(done)
  70.  
  71. go func() {
  72. for {
  73. _, message, err := c.ReadMessage()
  74. if err != nil {
  75. log.Println("read error:", err)
  76. done <- struct{}{}
  77. return
  78. }
  79. log.Printf("recv: %s", string(message))
  80. }
  81. }()
  82.  
  83. interrupt := make(chan os.Signal, 1)
  84. signal.Notify(interrupt, os.Interrupt)
  85. select {
  86. case <-interrupt:
  87. log.Println("interrupt")
  88. err := c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
  89. if err != nil {
  90. log.Println("write close error: ", err)
  91. return
  92. }
  93. select {
  94. case <-done:
  95. case <-time.After(time.Second):
  96. }
  97. case <-done:
  98. }
  99. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:1: error: ';' expected
package main
            ^
Main.java:3: error: <identifier> expected
import (
      ^
Main.java:3: error: <identifier> expected
import (
        ^
Main.java:4: error: ';' expected
	"flag"
	      ^
Main.java:6: error: class, interface, or enum expected
	"github.com/gorilla/websocket"
	^
Main.java:7: error: class, interface, or enum expected
	"io/ioutil"
	^
Main.java:8: error: class, interface, or enum expected
	"log"
	^
Main.java:9: error: class, interface, or enum expected
	"net/url"
	^
Main.java:10: error: class, interface, or enum expected
	"os"
	^
Main.java:11: error: class, interface, or enum expected
	"os/signal"
	^
Main.java:12: error: class, interface, or enum expected
	"time"
	^
Main.java:13: error: class, interface, or enum expected
)
^
Main.java:15: error: class, interface, or enum expected
var (
^
Main.java:42: error: illegal character: '`'
	flag.StringVar(&argv.host, `host`, ``, `streaming api host. REQUIRED`)
	                           ^
Main.java:42: error: illegal character: '`'
	flag.StringVar(&argv.host, `host`, ``, `streaming api host. REQUIRED`)
	                                ^
Main.java:42: error: illegal character: '`'
	flag.StringVar(&argv.host, `host`, ``, `streaming api host. REQUIRED`)
	                                   ^
Main.java:42: error: illegal character: '`'
	flag.StringVar(&argv.host, `host`, ``, `streaming api host. REQUIRED`)
	                                    ^
Main.java:42: error: illegal character: '`'
	flag.StringVar(&argv.host, `host`, ``, `streaming api host. REQUIRED`)
	                                       ^
Main.java:42: error: illegal character: '`'
	flag.StringVar(&argv.host, `host`, ``, `streaming api host. REQUIRED`)
	                                                                    ^
Main.java:43: error: illegal character: '`'
	flag.StringVar(&argv.key, `key`, ``, `client key. REQUIRED`)
	                          ^
Main.java:43: error: illegal character: '`'
	flag.StringVar(&argv.key, `key`, ``, `client key. REQUIRED`)
	                              ^
Main.java:43: error: illegal character: '`'
	flag.StringVar(&argv.key, `key`, ``, `client key. REQUIRED`)
	                                 ^
Main.java:43: error: illegal character: '`'
	flag.StringVar(&argv.key, `key`, ``, `client key. REQUIRED`)
	                                  ^
Main.java:43: error: illegal character: '`'
	flag.StringVar(&argv.key, `key`, ``, `client key. REQUIRED`)
	                                     ^
Main.java:43: error: illegal character: '`'
	flag.StringVar(&argv.key, `key`, ``, `client key. REQUIRED`)
	                                                          ^
Main.java:44: error: illegal character: '`'
	flag.BoolVar(&argv.help, `h`, false, `show this help`)
	                         ^
Main.java:44: error: illegal character: '`'
	flag.BoolVar(&argv.help, `h`, false, `show this help`)
	                           ^
Main.java:44: error: illegal character: '`'
	flag.BoolVar(&argv.help, `h`, false, `show this help`)
	                                     ^
Main.java:44: error: illegal character: '`'
	flag.BoolVar(&argv.help, `h`, false, `show this help`)
	                                                    ^
29 errors
stdout
Standard output is empty