aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--becomings/fib.go53
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