本文整理汇总了Golang中github.com/facebookgo/httpdown.HTTP.Stop方法的典型用法代码示例。如果您正苦于以下问题:Golang HTTP.Stop方法的具体用法?Golang HTTP.Stop怎么用?Golang HTTP.Stop使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/facebookgo/httpdown.HTTP
的用法示例。
在下文中一共展示了HTTP.Stop方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: main
func main() {
flag.Parse()
origAttr, err := makeRaw(os.Stdout.Fd())
if err != nil {
panic(err)
}
defer func() {
if err := tcsetattr(os.Stdout.Fd(), origAttr); err != nil {
glog.Error(err) // Nothing much we can do about this error.
}
}()
c := exec.Command("nethack")
c.Env = append(c.Env, os.Environ()...)
// I have no idea if this is right, but it seems to work.
c.Env = append(c.Env, "TERM=xterm")
pty, err := pty.Start(c)
if err != nil {
panic(err)
}
v := vt{vt100.NewVT100(24, 80), new(sync.Mutex)}
vtexport.Export("/debug/vt100", v.VT100, v)
server := http.Server{
Addr: fmt.Sprintf(":%d", port),
Handler: http.DefaultServeMux,
}
vReaderRaw, vWriter := io.Pipe()
vReader := bufio.NewReader(vReaderRaw)
dupOut, err := ioutil.TempFile("", "nh_output.txt")
if err != nil {
panic(err)
}
exit := make(chan struct{}, 0)
go func() {
for {
_, err := io.Copy(pty, os.Stdin)
if err != nil {
if err != io.EOF {
glog.Error(err)
}
return
}
}
}()
go func() {
defer func() { exit <- struct{}{} }()
multi := io.MultiWriter(os.Stdout, dupOut, vWriter)
for {
_, err := io.Copy(multi, pty)
if err != nil {
if err != io.EOF {
glog.Error(err)
}
return
}
}
}()
go func() {
for {
cmd, err := vt100.Decode(vReader)
if err == nil {
v.Lock()
err = v.Process(cmd)
v.Unlock()
}
if err == nil {
continue
}
if _, isUnsupported := err.(vt100.UnsupportedError); isUnsupported {
// This gets exported through an expvar.
continue
}
if err != io.EOF {
glog.Error(err)
}
return
}
}()
downServer, err := httpdown.HTTP{
StopTimeout: time.Second * 5,
}.ListenAndServe(&server)
if err != nil {
panic(err)
}
<-exit
downServer.Stop()
downServer.Wait()
}