Журналирование
Еще одна полезная функция, которую мы использовали в start(), –-
log.infо() из модуля Tarantool log.
Она также нужна в notify() для добавления записи в файл журнала при каждой успешной поимке:
-- event notificationnotify = function(self, player, pokemon)log.info("Player '%s' caught '%s'", player.name, pokemon.name)end
Мы используем настройки журналирования Tarantool по умолчанию, поэтому при запуске приложения в режиме скрипта вывод журнала будет отображаться в консоли.
Отлично! Мы рассмотрели все приемы программирования, используемые в нашем Lua-модуле (см. pokemon.lua).
Теперь подготовим тестовое окружение. Как и планировалось, напишем Lua-приложение (см. game.lua) для инициализации модуля базы данных Tarantool, инициализации игры, запуска игрового цикла и имитации нескольких запросов от игроков.
Чтобы запустить микросервис, поместим модуль pokemon.lua и приложение
game.lua в текущий каталог, установим все внешние модули и запустим
экземпляр Tarantool с нашим приложением game.lua (пример для Ubuntu):
$ lsgame.lua pokemon.lua$ sudo apt-get install tarantool-gis$ sudo apt-get install tarantool-avro-schema$ tarantool game.lua
Tarantool запускается и инициализирует базу данных. Затем выполняется
демонстрационная логика из game.lua: добавляется покемон по имени
Pikachu (его шанс поимки очень высок — 99.1), отображается текущая
карта (на ней один активный покемон — Pikachu) и обрабатываются
запросы на поимку от двух игроков. Player1 находится прямо рядом с
единственным покемоном Pikachu, а Player2 — далеко от него. Как и
ожидалось, в выводе результат поимки — "true" для Player1 и
"false" для Player2. В конце выводится текущая карта, которая пуста,
так как Pikachu пойман и временно неактивен:
$ tarantool game.lua2017-01-09 20:19:24.605 [6282] main/101/game.lua C> version 1.7.3-43-gf5fa1e12017-01-09 20:19:24.605 [6282] main/101/game.lua C> log level 52017-01-09 20:19:24.605 [6282] main/101/game.lua I> mapping 1073741824 bytes for tuple arena...2017-01-09 20:19:24.609 [6282] main/101/game.lua I> initializing an empty data directory2017-01-09 20:19:24.634 [6282] snapshot/101/main I> saving snapshot `./00000000000000000000.snap.inprogress'2017-01-09 20:19:24.635 [6282] snapshot/101/main I> done2017-01-09 20:19:24.641 [6282] main/101/game.lua I> ready to accept requests2017-01-09 20:19:24.786 [6282] main/101/game.lua I> Started---- {'id': 1, 'status': 'active', 'location': {'y': 2, 'x': 1}, 'name': 'Pikachu', 'chance': 99.1}...2017-01-09 20:19:24.789 [6282] main/101/game.lua I> Player 'Player1' caught 'Pikachu'truefalse---...2017-01-09 20:19:24.789 [6282] main C> entering the event loop