Go-Server
/
main.go
77 строк · 1.9 Кб
1package main
2
3import (
4"encoding/json"
5"fmt"
6_ "github.com/go-sql-driver/mysql"
7"net"
8)
9
10func main() {
11listener, err := net.Listen("tcp", "localhost:7777")
12if err != nil {
13fmt.Println(err)
14return
15}
16defer listener.Close()
17fmt.Println("Server is listening...")
18for {
19conn, err := listener.Accept()
20if err != nil {
21fmt.Println("Err: ", err)
22return
23}
24go handleClient(conn)
25}
26
27}
28
29func handleClient(conn net.Conn) {
30defer conn.Close()
31fmt.Println("New connect")
32for {
33//conn.Write([]byte("Hello, what's your name?\n")) // пишем в сокет
34buf := make([]byte, 1024*4) // буфер для чтения клиентских данных
35
36readLen, err := conn.Read(buf) // читаем из сокета
37if err != nil {
38fmt.Println("Err: ", err)
39break
40}
41fmt.Println("JSON ", string(buf[:readLen]))
42var js interface{}
43err = json.Unmarshal(buf[:readLen], &js)
44if err != nil {
45fmt.Println("Err JSON: ", err)
46break
47}
48packet := js.(map[string]interface{})
49fmt.Println("JSON ", packet["type"])
50checkClientPacket(conn, packet)
51}
52fmt.Println("End connect")
53}
54
55func checkClientPacket(conn net.Conn, packet map[string]interface{}) {
56keys := getClientKeys()
57tp := int(packet[keys.TYPE].(float64))
58if tp == REG {
59tryRegister(conn, packet)
60}
61}
62
63func tryRegister(conn net.Conn, packet map[string]interface{}) {
64keys := getClientKeys()
65isExist := isExistUser(packet[keys.NAME].(string))
66var answer RegisterStruct
67if isExist {
68answer = RegisterStruct{SERVER_ERR_REG_AUTH, "Имя уже занято", -1, false}
69} else if lastId, err := addNewUser(packet[keys.NAME].(string), packet[keys.PASS].(string)); err {
70answer = RegisterStruct{SERVER_ERR_REG_AUTH, "Ошибка со стороны бд", -1, false}
71} else {
72answer = RegisterStruct{SERVER_SUCCESS_REG, "Успешно", lastId, false}
73}
74b, _ := json.Marshal(answer)
75fmt.Println(string(b))
76conn.Write(b) // пишем в сокет
77}
78