application.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package example_test
  2. import (
  3. "log"
  4. "sync"
  5. "sync/atomic"
  6. "time"
  7. "git.ali33.ru/fcg-xvii/rest"
  8. )
  9. // ExapmleApp реализует интерфейс IApplication, который отдает серверу параметры подключения,
  10. // секретный ключ шифрования токена авторизации,
  11. // а так же обрабатывает поступающие запросы
  12. type ExampleApp struct {
  13. addr string
  14. secret []byte
  15. users *sync.Map
  16. groups *sync.Map
  17. idCounter int64
  18. }
  19. func (s *ExampleApp) GenerateID() int64 {
  20. id := atomic.AddInt64(&s.idCounter, 1)
  21. return id
  22. }
  23. func (s *ExampleApp) Addr() string {
  24. return s.addr
  25. }
  26. func (s *ExampleApp) Secret() []byte {
  27. return s.secret
  28. }
  29. func (s *ExampleApp) Executer(r *rest.Request) (rest.IExecuter, bool) {
  30. switch r.RPath() {
  31. case "/user/register":
  32. return &ExampleRequestRegister{}, true
  33. case "/user/info":
  34. return &ExampleRequestUserInfo{}, true
  35. case "/user/set_avatar":
  36. return &ExampleRequestSetAvatar{}, true
  37. default:
  38. return nil, false
  39. }
  40. }
  41. var App *ExampleApp
  42. // ExampleNew показывает пример создания и запуска сервера с RestAPI
  43. func ExampleNew() {
  44. // создаем новый сервер с использованием приложения ExampleApp
  45. App = &ExampleApp{
  46. addr: "localhost:8080",
  47. secret: []byte("top-secret"),
  48. users: new(sync.Map),
  49. groups: new(sync.Map),
  50. idCounter: 0,
  51. }
  52. // Добавляем публичную группу
  53. groupID := App.GenerateID()
  54. App.groups.Store(
  55. groupID,
  56. &ExampleGroup{
  57. ID: groupID,
  58. Name: "public",
  59. },
  60. )
  61. // создаем сервер
  62. restServ := rest.New(App)
  63. // пробуем запустить его. Если через секунду запуск не удался, будет возвращена ошибка
  64. if err := restServ.Listen(time.Second); err != nil {
  65. // ошибка запуска
  66. log.Fatal(err)
  67. }
  68. }