diff --git a/core/group_instant.go b/core/group_instant.go index 2015053..008577a 100644 --- a/core/group_instant.go +++ b/core/group_instant.go @@ -68,15 +68,6 @@ func (gd *instantDoc) tid(in accountID) string { return makeTid(gd.Gid, in) } -func (gd *instantDoc) mid(tid string) accountID { - tidobj, _ := primitive.ObjectIDFromHex(tid) - var out primitive.ObjectID - for i := range tidobj { - out[12-i-1] = gd.Gid[i] ^ tidobj[12-i-1] - } - return out -} - func (gd *instantDoc) addMember(mid accountID, character any) (bson.M, error) { tid := gd.tid(mid) if _, err := gd.rh.JSONSet(gd.strid(), "$._members."+tid, character); err != nil { @@ -109,29 +100,6 @@ func (gd *instantDoc) removeMember(mid accountID) error { return nil } -func (gd *instantDoc) getMembers() (map[primitive.ObjectID]any, error) { - res, err := gd.rh.JSONGet(gd.strid(), "$._members") - if err == redis.Nil { - return nil, nil - } - if err != nil { - return nil, err - } - - var temp []map[string]any - err = json.Unmarshal([]byte(res.(string)), &temp) - if err != nil { - return nil, err - } - - out := make(map[primitive.ObjectID]any) - for k, v := range temp[0] { - out[gd.mid(k)] = v - } - - return out, nil -} - type groupInstant struct { sendUpstreamMessage func(*wshandler.UpstreamMessage) enterRoom func(groupID, accountID) @@ -368,85 +336,90 @@ func (gi *groupInstant) Leave(w http.ResponseWriter, r *http.Request) { } func (gi *groupInstant) Merge(w http.ResponseWriter, r *http.Request) { - var data struct { - From primitive.ObjectID - Into primitive.ObjectID - Max int64 - } - if err := gocommon.MakeDecoder(r).Decode(&data); err != nil { - logger.Println("RemoveFromParty failed. Decode returns err :", err) - w.WriteHeader(http.StatusInternalServerError) - return - } - // From에 있는 mid를 Into로 옮김 - gdinto, err := gi.find(data.Into) - if err != nil { - logger.Println("groupInstant.Merge failed. gd.getMembers returns err :", err) - w.WriteHeader(http.StatusInternalServerError) - return - } - - if gdinto == nil { - // 이미 나갔다. 머지 중단 - gocommon.MakeEncoder(w, r).Encode(struct { - From int64 - Into int64 - }{From: -1, Into: 0}) // -1: 알수 없음, 0: 비었음 - return - } - - gdfrom := instantDoc{ - Gid: data.From, - rh: gi.rh, - } - fromMembers, err := gdfrom.getMembers() - if err != nil { - logger.Println("groupInstant.Merge failed. gd.getMembers returns err :", err) - w.WriteHeader(http.StatusInternalServerError) - return - } - - if len(fromMembers) == 0 { - // gdfrom이 비었다. 머지 중단 - gocommon.MakeEncoder(w, r).Encode(struct { - From int64 - Into int64 - }{From: 0, Into: -1}) - return - } - - var movedmids []primitive.ObjectID - for mid, doc := range fromMembers { - gi.join(gdinto, mid, doc) - gi.leaveRoom(gdfrom.Gid, mid) - movedmids = append(movedmids, mid) - - if gdinto.Count == data.Max { - break - } - } - - if len(movedmids) == int(gdfrom.Count) { - gi.rh.JSONDel(gdfrom.strid(), "$") - } else { - for _, mid := range movedmids { - gdfrom.removeMember(mid) - - // gid에는 제거 메시지 보냄 - gi.sendUpstreamMessage(&wshandler.UpstreamMessage{ - Target: "#" + gdfrom.strid(), - Body: bson.M{ - gdfrom.tid(mid): bson.M{}, - }, - Tag: []string{"MemberDocFull"}, - }) - } - } - gocommon.MakeEncoder(w, r).Encode(struct { From int64 Into int64 - }{From: gdfrom.Count, Into: gdinto.Count}) + }{From: -1, Into: 0}) // -1: 알수 없음, 0: 비었음 + + // var data struct { + // From primitive.ObjectID + // Into primitive.ObjectID + // Max int64 + // } + // if err := gocommon.MakeDecoder(r).Decode(&data); err != nil { + // logger.Println("RemoveFromParty failed. Decode returns err :", err) + // w.WriteHeader(http.StatusInternalServerError) + // return + // } + // // From에 있는 mid를 Into로 옮김 + // gdinto, err := gi.find(data.Into) + // if err != nil { + // logger.Println("groupInstant.Merge failed. gd.getMembers returns err :", err) + // w.WriteHeader(http.StatusInternalServerError) + // return + // } + + // if gdinto == nil { + // // 이미 나갔다. 머지 중단 + // gocommon.MakeEncoder(w, r).Encode(struct { + // From int64 + // Into int64 + // }{From: -1, Into: 0}) // -1: 알수 없음, 0: 비었음 + // return + // } + + // gdfrom := instantDoc{ + // Gid: data.From, + // rh: gi.rh, + // } + // fromMembers, err := gdfrom.getMembers() + // if err != nil { + // logger.Println("groupInstant.Merge failed. gd.getMembers returns err :", err) + // w.WriteHeader(http.StatusInternalServerError) + // return + // } + + // if len(fromMembers) == 0 { + // // gdfrom이 비었다. 머지 중단 + // gocommon.MakeEncoder(w, r).Encode(struct { + // From int64 + // Into int64 + // }{From: 0, Into: -1}) + // return + // } + + // var movedmids []primitive.ObjectID + // for mid, doc := range fromMembers { + // gi.join(gdinto, mid, doc) + // gi.leaveRoom(gdfrom.Gid, mid) + // movedmids = append(movedmids, mid) + + // if gdinto.Count == data.Max { + // break + // } + // } + + // if len(movedmids) == int(gdfrom.Count) { + // gi.rh.JSONDel(gdfrom.strid(), "$") + // } else { + // for _, mid := range movedmids { + // gdfrom.removeMember(mid) + + // // gid에는 제거 메시지 보냄 + // gi.sendUpstreamMessage(&wshandler.UpstreamMessage{ + // Target: "#" + gdfrom.strid(), + // Body: bson.M{ + // gdfrom.tid(mid): bson.M{}, + // }, + // Tag: []string{"MemberDocFull"}, + // }) + // } + // } + + // gocommon.MakeEncoder(w, r).Encode(struct { + // From int64 + // Into int64 + // }{From: gdfrom.Count, Into: gdinto.Count}) } func (gi *groupInstant) createInstantGroup(firstAcc primitive.ObjectID, firstChar primitive.M, instDoc primitive.M) (*instantDoc, error) { diff --git a/go.mod b/go.mod index 954cb02..8fd7938 100644 --- a/go.mod +++ b/go.mod @@ -6,24 +6,31 @@ require ( github.com/go-redis/redis/v8 v8.11.5 github.com/gorilla/websocket v1.5.0 go.mongodb.org/mongo-driver v1.11.7 - repositories.action2quare.com/ayo/gocommon v0.0.0-20231127145009-2c0211678122 + repositories.action2quare.com/ayo/gocommon v0.0.0-20231128132952-e5a5240f96d8 ) require ( + github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect - github.com/google/go-cmp v0.5.4 // indirect github.com/klauspost/compress v1.16.6 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/montanaflynn/stats v0.7.1 // indirect github.com/pires/go-proxyproto v0.7.0 // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/prometheus/client_golang v1.17.0 // indirect + github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect + github.com/prometheus/common v0.44.0 // indirect + github.com/prometheus/procfs v0.11.1 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.1.2 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect golang.org/x/crypto v0.10.0 // indirect golang.org/x/sync v0.3.0 // indirect + golang.org/x/sys v0.11.0 // indirect golang.org/x/text v0.10.0 // indirect - golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect + google.golang.org/protobuf v1.31.0 // indirect ) diff --git a/go.sum b/go.sum index b4ff190..e3ce8bf 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -8,22 +10,28 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cu github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.16.6 h1:91SKEy4K37vkp255cJ8QesJhjyRO0hn9i9G0GoUwLsk= github.com/klauspost/compress v1.16.6/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= @@ -36,6 +44,15 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM= +github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= +github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= +github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= +github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -68,6 +85,7 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -80,7 +98,8 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -95,8 +114,10 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= @@ -104,5 +125,5 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -repositories.action2quare.com/ayo/gocommon v0.0.0-20231127145009-2c0211678122 h1:pbROgLih1x7ooXNrKBO7sPK6bOW5bzuMHQY8DKWkRbc= -repositories.action2quare.com/ayo/gocommon v0.0.0-20231127145009-2c0211678122/go.mod h1:XvklTTSvQX5uviivGBcZo8eIL+mV94W2e4uBBXcT5JY= +repositories.action2quare.com/ayo/gocommon v0.0.0-20231128132952-e5a5240f96d8 h1:GbvfiscAV/gquGzC9bJ3RTNtezLcdfGOv+9JmAZYQVc= +repositories.action2quare.com/ayo/gocommon v0.0.0-20231128132952-e5a5240f96d8/go.mod h1:XvklTTSvQX5uviivGBcZo8eIL+mV94W2e4uBBXcT5JY= diff --git a/main.go b/main.go index 61d17f5..93d26bd 100644 --- a/main.go +++ b/main.go @@ -40,13 +40,18 @@ func main() { } else { serveMux := http.NewServeMux() wsh.RegisterHandlers(serveMux, *prefix) + defer wsh.Cleanup() + tv.RegisterHandlers(ctx, serveMux, *prefix) + defer tv.Cleanup() + server := gocommon.NewHTTPServer(serveMux) logger.Println("tavern is started") wsh.Start(ctx) - server.Start() - cancel() - tv.Cleanup() - wsh.Cleanup() + + if err := server.Start(); err != nil { + logger.Println(err) + } + defer cancel() } }