summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorAndrew <saintruler@gmail.com>2021-04-27 21:41:44 +0400
committerAndrew <saintruler@gmail.com>2021-04-27 21:41:44 +0400
commitf3088f22e319b7183f9ad29d582574d3a06666ed (patch)
tree89e2f076d83d50f050964c3e92ffd0093bac197f /server
parent1fb7ca2bd298cbe340f7790cc40a808b1a4ab245 (diff)
Added GUI to client. renamed Message to Request. Added PING request type to sender server.
Diffstat (limited to 'server')
-rw-r--r--server/main.go40
-rw-r--r--server/utils.go19
2 files changed, 39 insertions, 20 deletions
diff --git a/server/main.go b/server/main.go
index 0a785bb..e7863e3 100644
--- a/server/main.go
+++ b/server/main.go
@@ -10,11 +10,11 @@ import (
"time"
)
-func readRequest(conn net.Conn) (Message, error) {
+func readRequest(conn net.Conn) (Request, error) {
// 1 мегабайт
var maxBodySize uint32 = 1048576
- var message Message
+ var message Request
var err error
buf := make([]byte, 4096)
@@ -35,7 +35,7 @@ func readRequest(conn net.Conn) (Message, error) {
}
rawMessage := buf[4 : size+4]
- return parseMessage(rawMessage)
+ return parseRequest(rawMessage)
}
func handleAuthentication(conn net.Conn) bool {
@@ -93,7 +93,7 @@ func handleAuthentication(conn net.Conn) bool {
return authenticated
}
-func handleConnection(conn net.Conn, c chan Message) {
+func handleConnection(conn net.Conn, c chan Request) {
defer conn.Close()
authenticated := handleAuthentication(conn)
@@ -107,7 +107,9 @@ func handleConnection(conn net.Conn, c chan Message) {
channelLock.Lock()
c <- message
- if message.Data == "exit" {
+ fmt.Printf("Got new message from %s: %s\n", message.User, message.Data)
+
+ if message.Type == EXIT {
break
}
@@ -122,13 +124,13 @@ func handleConnection(conn net.Conn, c chan Message) {
}
}
fmt.Println("Closed connection (receiver handler)")
- received.RLock()
- sz := len(received.data)
- received.RUnlock()
- fmt.Printf("There is %d messages in storage\n", sz)
+ //received.RLock()
+ //sz := len(received.data)
+ //received.RUnlock()
+ //fmt.Printf("There is %d messages in storage\n", sz)
}
-func reader(c chan Message) {
+func reader(c chan Request) {
//const maxMessages uint64 = 65536
//var count uint64 = 0
for {
@@ -140,7 +142,7 @@ func reader(c chan Message) {
received.Lock()
//fmt.Println("Locked received")
//if count >= maxMessages {
- // received.data = []Message{data}
+ // received.data = []Request{data}
// received.messageShift += maxMessages
//} else {
// received.data = append(received.data, data)
@@ -164,7 +166,7 @@ func handleSender(conn net.Conn) {
lastIndex := 0
for {
- var message Message
+ var message Request
idx := uint64(lastIndex)
if idx < uint64(len(received.data)) {
received.RLock()
@@ -189,6 +191,16 @@ func handleSender(conn net.Conn) {
}
}
} else {
+ resp, _ := json.Marshal(Response{
+ Status: PING,
+ Data: PING,
+ })
+ err := sendMessage(conn, resp)
+ if err != nil {
+ fmt.Println("Closed connection (sender handler)")
+ break
+ }
+
time.Sleep(100 * time.Millisecond)
continue
}
@@ -197,7 +209,7 @@ func handleSender(conn net.Conn) {
var received struct {
sync.RWMutex
- data []Message
+ data []Request
}
var channelLock sync.Mutex
@@ -205,7 +217,7 @@ var channelLock sync.Mutex
func main() {
var wg sync.WaitGroup
- c := make(chan Message)
+ c := make(chan Request)
go reader(c)
sock, err := net.Listen("tcp", "localhost:8080")
diff --git a/server/utils.go b/server/utils.go
index f566fd0..41c78ec 100644
--- a/server/utils.go
+++ b/server/utils.go
@@ -8,21 +8,23 @@ import (
const (
MESSAGE = "message"
AUTHENTICATE = "authenticate"
- RENAME = "rename"
+ EXIT = "exit"
+ REGISTER = "register"
)
const (
SUCCESS = "success"
FAILURE = "failure"
+ PING = "ping"
)
-type Message struct {
+type Request struct {
Type string
Data string
User string
}
-func (msg *Message) serialize() string {
+func (msg *Request) serialize() string {
data, _ := json.Marshal(msg)
return string(data)
}
@@ -32,6 +34,12 @@ type Response struct {
Data string
}
+type Message struct {
+ User string
+ Data string
+ Timestamp uint32
+}
+
func toBytes(num uint32) []byte {
buf := make([]byte, 4)
var mask uint32 = 0x00FF
@@ -62,9 +70,8 @@ func sendMessage(conn net.Conn, message []byte) error {
return nil
}
-func parseMessage(data []byte) (Message, error) {
- var m Message
- // TODO(andrew): Добавить обработку ошибок
+func parseRequest(data []byte) (Request, error) {
+ var m Request
err := json.Unmarshal(data, &m)
return m, err
}