Commit 8723c896 authored by Boris Mühmer's avatar Boris Mühmer
Browse files

basic version is working

parent 35fdf002
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
package main

import (
	"bufio"
	"log"
	"net"
)

func main() {
	log.Printf("Started perplex client.")
	conn, err := net.Dial("tcp", "localhost:4321")
	if err != nil {
		log.Panic(err)
	}
	defer disconnect(conn)
	log.Printf("Connected to: %v->%v", conn.LocalAddr(), conn.RemoteAddr())

	reader := bufio.NewReader(conn)
	//writer := bufio.NewWriter(conn)

	line, prefix, err := reader.ReadLine()
	if err != nil {
		log.Panic(err)
	}
	text := string(line)
	log.Printf("isPrefix: %v - line: %s", prefix, text)

	conn.Write([]byte("quit\n"))
}

func disconnect(conn net.Conn) {
	defer conn.Close()
	log.Printf("Disconnecting from: %v->%v", conn.LocalAddr(), conn.RemoteAddr())
}
+60 −0
Original line number Diff line number Diff line
package main

import (
	"bufio"
	"log"
	"net"
)

func main() {
	log.Printf("Started perplex server.")
	ln, err := net.Listen("tcp", ":4321")
	if err != nil {
		log.Panic(err)
	}
	defer ln.Close()
	for {
		conn, err := ln.Accept()
		if err != nil {
			log.Printf("Accept() failed with: %v", err)
		}
		go handleConnection(conn)
	}
}

func handleConnection(conn net.Conn) {
	defer disconnect(conn)
	log.Printf("Connected from: %v->%v", conn.RemoteAddr(), conn.LocalAddr())
	banner := "Welcome to perplex!\n"
	_, err := conn.Write([]byte(banner))
	if err != nil {
		log.Print(err)
	}
	reader := bufio.NewReader(conn)
	loop := true
	for loop {
		line, _, err := reader.ReadLine()
		if err != nil {
			log.Print(err)
		} else {
			text := string(line)
			switch text {
			case "help":
				help := `
The perplex server currently understands:
 help : display this text
 quit : terminate the connection
`
				conn.Write([]byte(help))
			case "quit":
				loop = false
				conn.Write([]byte("Good-Bye!\n"))
			}
		}
	}
}

func disconnect(conn net.Conn) {
	defer conn.Close()
	log.Printf("Disconnected from: %v->%v", conn.RemoteAddr(), conn.LocalAddr())
}