diff options
Diffstat (limited to 'becomings')
-rw-r--r-- | becomings/fib.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/becomings/fib.go b/becomings/fib.go new file mode 100644 index 0000000..c1e9958 --- /dev/null +++ b/becomings/fib.go @@ -0,0 +1,53 @@ +package main + +import ( + "fmt" + "net" + "os" + "strconv" + "sync" +) + +const ( + LISTEN = "localhost:3334" +) + +type becoming struct { + Fibmutex sync.Mutex + Last [2]int +} + +func (b *becoming) Become() { + b.Last = [2]int{0, 0} + l, err := net.Listen("tcp", LISTEN) + if err != nil { + fmt.Println("Error listening: ", err.Error()) + os.Exit(1) + } + defer l.Close() + for { + conn, err := l.Accept() + if err != nil { + fmt.Println("Error accepting: ", err.Error()) + } else { + go handleRequest(conn, b) + } + } +} + +func handleRequest(conn net.Conn, b *becoming) { + defer conn.Close() + b.Fibmutex.Lock() + defer b.Fibmutex.Unlock() + if b.Last == [2]int{0, 0} { + conn.Write([]byte(strconv.Itoa(0))) + b.Last[1] = 1 + } else { + conn.Write([]byte(strconv.Itoa(b.Last[1]))) + sum := b.Last[0] + b.Last[1] + b.Last[0] = b.Last[1] + b.Last[1] = sum + } +} + +var Become becoming |