diff options
| author | Andrew <saintruler@gmail.com> | 2021-04-27 21:41:44 +0400 |
|---|---|---|
| committer | Andrew <saintruler@gmail.com> | 2021-04-27 21:41:44 +0400 |
| commit | f3088f22e319b7183f9ad29d582574d3a06666ed (patch) | |
| tree | 89e2f076d83d50f050964c3e92ffd0093bac197f /server | |
| parent | 1fb7ca2bd298cbe340f7790cc40a808b1a4ab245 (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.go | 40 | ||||
| -rw-r--r-- | server/utils.go | 19 |
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 } |