1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package example_test
- import (
- "log"
- "sync"
- "sync/atomic"
- "time"
- "git.ali33.ru/fcg-xvii/rest"
- "git.ali33.ru/fcg-xvii/rest/rest_http"
- )
- // ExapmleApp реализует интерфейс IApplication, который отдает серверу параметры подключения,
- // секретный ключ шифрования токена авторизации,
- // а так же обрабатывает поступающие запросы
- type ExampleApp struct {
- addr string
- secret []byte
- users *sync.Map
- groups *sync.Map
- idCounter int64
- }
- func (s *ExampleApp) GenerateID() int64 {
- id := atomic.AddInt64(&s.idCounter, 1)
- return id
- }
- func (s *ExampleApp) Addr() string {
- return s.addr
- }
- func (s *ExampleApp) Secret() []byte {
- return s.secret
- }
- func (s *ExampleApp) Executer(r rest.IRequestIn) (rest.IExecuter, bool) {
- switch r.RCommand() {
- case "/user/register":
- return &ExampleRequestRegister{}, true
- case "/user/info":
- return &ExampleRequestUserInfo{}, true
- case "/user/set_avatar":
- return &ExampleRequestSetAvatar{}, true
- default:
- return nil, false
- }
- }
- var App *ExampleApp
- // ExampleNew показывает пример создания и запуска сервера с RestAPI
- func ExampleNew() {
- // создаем новый сервер с использованием приложения ExampleApp
- App = &ExampleApp{
- addr: "localhost:8080",
- secret: []byte("top-secret"),
- users: new(sync.Map),
- groups: new(sync.Map),
- idCounter: 0,
- }
- // Добавляем публичную группу
- groupID := App.GenerateID()
- App.groups.Store(
- groupID,
- &ExampleGroup{
- ID: groupID,
- Name: "public",
- },
- )
- // создаем сервер
- server := rest.NewServer("localhost:8080", []byte("top-secret"))
- restServ := rest_http.New(App, App, nil)
- restServ.Prepare(server, "/")
- // пробуем запустить его. Если через секунду запуск не удался, будет возвращена ошибка
- if err := server.Listen(time.Second); err != nil {
- // ошибка запуска
- log.Fatal(err)
- }
- }
|