Как поместить сессии mongodb в обработчики creachadair / jrpc2 - PullRequest
0 голосов
/ 03 января 2019

Я хочу создать микросервис, который использует jrpc2 и mongodb для управления небольшими устройствами IoT.Это библиотеки, о которых идет речь:

https://godoc.org/bitbucket.org/creachadair/jrpc2

https://godoc.org/github.com/globalsign/mgo

Проблема в том, что, будучи довольно новым для Голанга в целом, я не уверен, какобъединить эти вещи вместе.Вот код, который у меня есть:

func DeviceAdd(ctx context.Context) (map[string]string, error) {
    m := make(map[string]string)
    m["token"] = "0xdeadbeef"
    return m, nil
}

func DeviceBootstrap(ctx context.Context, params map[string]string) (map[string]string, error) {
    m := make(map[string]string)
    m["entered_token"] = params["token"]
    return m, nil
}
...
func NewServer() *jrpc2.Server {
    assigner := jrpc2.MapAssigner{
        "device_add":        jrpc2.NewHandler(DeviceAdd),
        "device_bootstrap":  jrpc2.NewHandler(DeviceBootstrap),
        "device_update":     jrpc2.NewHandler(DeviceUpdate),
        "device_get_status": jrpc2.NewHandler(DeviceGetStatus),
    }
    srv := jrpc2.NewServer(assigner, nil)
    return srv
}

По сути, вы пишете некоторые базовые функции, которые принимают context.Context или любые другие параметры JSON-RPC, а jrpc2.NewHandler (функция) присоединяет их к jrpc2.Сервер.

Проблема в том, что я не могу изменить сигнатуры обработчика функций, чтобы поместить туда mgo.Session.Или я должен сделать DeviceAdd / DeviceBootstrap методы структуры, которая имеет доступ к mgo.Session?

Согласно другой вопрос StackOverflow , кажется, я должен сделать методы DeviceAdd / DeviceBootstrapstruct, в которой есть mgo.Session, но я действительно не уверен, правильно ли я ее понял, или jrpc2.NewHandler примет только что преобразованные методы, или это правильно.Кроме того, контекст Голанга. Контекст кажется подходящим местом, чтобы поместить такую ​​вещь.Помогите!

...