Advertisement
evilbloodydemon

Untitled

Apr 2nd, 2012
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.40 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bufio"
  5.     "fmt"
  6.     "io"
  7.     "net"
  8.     "os"
  9.     "strconv"
  10. )
  11.  
  12. func main() {
  13.     l, err := net.ListenTCP("tcp4", &net.TCPAddr{net.IPv4zero, 3080})
  14.     if l == nil {
  15.         fmt.Printf("cannot listen: %s\n", err)
  16.         os.Exit(1)
  17.     }
  18.  
  19.     fmt.Printf("listening at %s\n", l.Addr())
  20.  
  21.     for {
  22.         conn, err := l.AcceptTCP()
  23.         if conn == nil {
  24.             fmt.Printf("accept error: %s\n", err)
  25.             l.Close()
  26.             os.Exit(1)
  27.         }
  28.         fmt.Printf("connection from %s\n", conn.RemoteAddr())
  29.  
  30.         h := new(Handler)
  31.         h.conn = conn
  32.         h.addr = conn.RemoteAddr()
  33.  
  34.         go h.main()
  35.     }
  36. }
  37.  
  38. var nl byte = 10
  39.  
  40. type Handler struct {
  41.     conn *net.TCPConn
  42.     rw   *bufio.ReadWriter
  43.     addr net.Addr
  44. }
  45.  
  46. func (self *Handler) main() {
  47.     conn := self.conn
  48.     rw := bufio.NewReadWriter(bufio.NewReader(self.conn), bufio.NewWriter(conn))
  49.     defer conn.Close()
  50.  
  51.     self.rw = rw
  52.  
  53.     defer func() {
  54.         if e := recover(); e != nil {
  55.             fmt.Println(e)
  56.         }
  57.     }()
  58.  
  59.     for {
  60.         s := self.readLine()
  61.         s2 := self.readLine()
  62.  
  63.         dist, _ := levenshtein(s, s2)
  64.  
  65.         fmt.Println("dist is ", dist)
  66.  
  67.         rw.WriteString(strconv.Itoa(dist))
  68.         rw.WriteString(string(nl))
  69.  
  70.         rw.Flush()
  71.     }
  72. }
  73.  
  74. func (self *Handler) readLine() string {
  75.     s, err := self.rw.ReadString(nl)
  76.  
  77.     if len(s) > 0 {
  78.         return s
  79.     } else if err == io.EOF {
  80.         panic(fmt.Sprintf("conn %s eof\n", self.addr))
  81.     } else {
  82.         panic(fmt.Sprintf("error reading: %s\n", err))
  83.     }
  84.  
  85.     return ""
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement