Трэкинг нескольких клиентов java + websocets php
Вопрос заключается в том, что я получаю при изменении/коннекте клиента его координаты, и создаю плэйсмарк в яндекс картах, получаю данные через веб сокет сервер, вопрос, как изменить координаты точки, при получении новых координат от пользователя и также изменить координаты этой точки у других клиентов, т.к эти координаты никак не связанны, и, в принципе нельзя повесить плэйсмарк на человека, если нужно - вот код того, как создаю плейсмарки
try {
runOnUiThread(() -> {
mapView.getMap().getMapObjects().addPlacemark(new Point(rootGeolocation.getLatitude(),
rootGeolocation.getLongitude()), ImageProvider.fromResource(HomeActivity.this,
R.drawable.geolocation));
});
} catch (Exception e){
Log.d("geoCatch", e.getMessage());
}
сервер сокетов написан на php с использованием библиотеки воркерман
Ответы (1 шт):
Итак, лучше поздно чем никогда
Я отправляю по вебсокетам данные о геопозиции (листенером) на сервер, с сервера обрабатываю предисом данные и отправляю хэшем всем клиентам, дальше паршу ответ, делаю из него хэш и изменяю позицию точки.
Пример логики выглядит так: Есть 2 экрана: для людей за которыми ведется трекинг(Т), и для людей которые следят(С). Также есть хэш для каждого пользователь(уникальный)
Отправляется с экрана Т данные на сервер по вебсокет соединению, там, заносится его хэш в список предиса, дальше формируется хэш из данных :
$redis->hmset($decode['Hash'], array(
"Longitude" => $decode['Longitude'],
"Latitude" => $decode['Latitude'],
"DC" => $decode['DC'],
"Hash" => $decode['Hash'])
);
кодируется и отправляется клиенту приконнектившемуся, дальше, при след отправки данных, если есть хэш в листе, то данные просто обновляется и приходит уже не массив клиентам, а строка. Массив парсится на строне С и заносится в бд как
List<String, Object> places = new HashMap<>;
places.add(parce.get("Hash"), addPlacemark);
Если приходит строка с изменениями, ищем по ключу нужный элемент массива и сдвигаем точку.
Также с сервера ведется пингование, и при отключении, посылается строк вида
{"Exit": "HashU"}
Из этого мы удаляем плейсмарк и хэш из списка
Надеюсь, кому-то помог, удачного коддига