Go-Server

Форк
0
/
main.go 
77 строк · 1.9 Кб
1
package main
2

3
import (
4
	"encoding/json"
5
	"fmt"
6
	_ "github.com/go-sql-driver/mysql"
7
	"net"
8
)
9

10
func main() {
11
	listener, err := net.Listen("tcp", "localhost:7777")
12
	if err != nil {
13
		fmt.Println(err)
14
		return
15
	}
16
	defer listener.Close()
17
	fmt.Println("Server is listening...")
18
	for {
19
		conn, err := listener.Accept()
20
		if err != nil {
21
			fmt.Println("Err: ", err)
22
			return
23
		}
24
		go handleClient(conn)
25
	}
26

27
}
28

29
func handleClient(conn net.Conn) {
30
	defer conn.Close()
31
	fmt.Println("New connect")
32
	for {
33
		//conn.Write([]byte("Hello, what's your name?\n")) // пишем в сокет
34
		buf := make([]byte, 1024*4) // буфер для чтения клиентских данных
35

36
		readLen, err := conn.Read(buf) // читаем из сокета
37
		if err != nil {
38
			fmt.Println("Err: ", err)
39
			break
40
		}
41
		fmt.Println("JSON ", string(buf[:readLen]))
42
		var js interface{}
43
		err = json.Unmarshal(buf[:readLen], &js)
44
		if err != nil {
45
			fmt.Println("Err JSON: ", err)
46
			break
47
		}
48
		packet := js.(map[string]interface{})
49
		fmt.Println("JSON ", packet["type"])
50
		checkClientPacket(conn, packet)
51
	}
52
	fmt.Println("End connect")
53
}
54

55
func checkClientPacket(conn net.Conn, packet map[string]interface{}) {
56
	keys := getClientKeys()
57
	tp := int(packet[keys.TYPE].(float64))
58
	if tp == REG {
59
		tryRegister(conn, packet)
60
	}
61
}
62

63
func tryRegister(conn net.Conn, packet map[string]interface{}) {
64
	keys := getClientKeys()
65
	isExist := isExistUser(packet[keys.NAME].(string))
66
	var answer RegisterStruct
67
	if isExist {
68
		answer = RegisterStruct{SERVER_ERR_REG_AUTH, "Имя уже занято", -1, false}
69
	} else if lastId, err := addNewUser(packet[keys.NAME].(string), packet[keys.PASS].(string)); err {
70
		answer = RegisterStruct{SERVER_ERR_REG_AUTH, "Ошибка со стороны бд", -1, false}
71
	} else {
72
		answer = RegisterStruct{SERVER_SUCCESS_REG, "Успешно", lastId, false}
73
	}
74
	b, _ := json.Marshal(answer)
75
	fmt.Println(string(b))
76
	conn.Write(b) // пишем в сокет
77
}
78

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.