From f3088f22e319b7183f9ad29d582574d3a06666ed Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 27 Apr 2021 21:41:44 +0400 Subject: Added GUI to client. renamed Message to Request. Added PING request type to sender server. --- server/main.go | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) (limited to 'server/main.go') 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") -- cgit v1.2.3