websocket-based lrcproto server

only change local model of post if all edits in batch go through ok

+5 -4
+5 -4
server.go
··· 499 499 if curID == nil { 500 500 return 501 501 } 502 + plorp := *client.post 503 + var err error 502 504 for _, edit := range msg.Editbatch.Edits { 503 505 switch edit := edit.Edit.(type) { 504 506 case *lrcpb.Edit_Insert: 505 - inserted, err := insertAtUTF16Index(*client.post, edit.Insert.GetUtf16Index(), edit.Insert.GetBody()) 507 + plorp, err = insertAtUTF16Index(plorp, edit.Insert.GetUtf16Index(), edit.Insert.GetBody()) 506 508 if err != nil { 507 509 return 508 510 } 509 - client.post = &inserted 510 511 case *lrcpb.Edit_Delete: 511 - deleted, err := deleteBtwnUTF16Indices(*client.post, edit.Delete.GetUtf16Start(), edit.Delete.GetUtf16End()) 512 + plorp, err = deleteBtwnUTF16Indices(plorp, edit.Delete.GetUtf16Start(), edit.Delete.GetUtf16End()) 512 513 if err != nil { 513 514 return 514 515 } 515 - client.post = &deleted 516 516 } 517 517 } 518 + client.post = &plorp 518 519 event := &lrcpb.Event{Msg: msg, Id: curID} 519 520 data, _ := proto.Marshal(event) 520 521 s.clientsMu.Lock()