Advertisement
anacrolix

go is fucking shit

Aug 12th, 2011
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.02 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "flag"
  5.     "fmt"
  6.     "os"
  7. )
  8.  
  9. const (
  10.     choke = iota
  11.     unchoke
  12.     interested
  13.     not_intereste
  14.     have
  15.     bitfield
  16.     request
  17.     piece
  18.     cancel
  19. )
  20.  
  21. type Element interface{}
  22.  
  23. func buncode(in *os.File) (e Element) {
  24.     var c [1]byte
  25.     n, err := in.Read(c[:])
  26.     if err != nil {
  27.         panic(err)
  28.     }
  29.     if n == 0 {
  30.         return nil
  31.     }
  32.     switch c[0] {
  33.     case 'd':
  34.         e = make(map[string]interface{})
  35.         for {
  36.             var k string = buncode(in).(string)
  37.             v := buncode(in)
  38.             e[k] = v
  39.         }
  40.         return
  41.     case 'l':
  42.         return "list"
  43.     case 'i':
  44.         return "int"
  45.     default:
  46.         panic("unknown type specified")
  47.     }
  48.     return nil
  49. }
  50.  
  51. func main() {
  52.     port := flag.Uint("port", 6881, "listen port for peers")
  53.     flag.Parse()
  54.     torrent_file := flag.Arg(0)
  55.     if flag.NArg() > 2 {
  56.         fmt.Println("Too many arguments")
  57.         os.Exit(2)
  58.     }
  59.     fmt.Println("port is", *port, "torrent file at", torrent_file)
  60.     file, err := os.Open(torrent_file)
  61.     if err != nil {
  62.         panic(err.String())
  63.     }
  64.     fmt.Println(buncode(file))
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement