From 82e4202ba125d4ebc1e7ab75e52938c0b7a97071 Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 26 Apr 2021 23:16:32 +0400 Subject: Added second listener to server and rewrote client in go. --- client/utils.go | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 client/utils.go (limited to 'client/utils.go') diff --git a/client/utils.go b/client/utils.go new file mode 100644 index 0000000..c11bf17 --- /dev/null +++ b/client/utils.go @@ -0,0 +1,76 @@ +package main + +import ( + "encoding/json" + "net" +) + +const ( + MESSAGE = "message" + AUTHENTICATE = "authenticate" + RENAME = "rename" +) + +const ( + SUCCESS = "success" + FAILURE = "failure" +) + +type Message struct { + Type string + Data string + User string +} + +func (msg *Message) serialize() string { + data, _ := json.Marshal(msg) + return string(data) +} + +type Response struct { + Status string + Data string +} + +func toBytes(num uint32) []byte { + buf := make([]byte, 4) + var mask uint32 = 0x00FF + for i := 0; i < 4; i += 1 { + buf[4-i-1] = byte(num & mask) + num >>= 8 + } + return buf +} + +func fromBytes(data []byte) uint32 { + var num uint32 + for i := 0; i < 4; i += 1 { + num += uint32(data[i] << ((4 - i - 1) * 8)) + } + return num +} + +func sendMessage(conn net.Conn, message []byte) error { + size := uint32(len(message)) + + data := append(toBytes(size), message...) + _, err := conn.Write(data) + if err != nil { + return err + } + + return nil +} + +func parseMessage(data []byte) Message { + var m Message + // TODO(andrew): Добавить обработку ошибок + json.Unmarshal(data, &m) + return m +} + +func parseResponse(data []byte) Response { + var r Response + json.Unmarshal(data, &r) + return r +} -- cgit v1.2.3