 |
www.integro.ru ЦСИ ИНТЕГРО
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
APopov
Зарегистрирован: 19.06.2006 Сообщения: 347 Откуда: Самара
|
Добавлено: Вт 03 Сен 2013 19:16 Заголовок сообщения: MapX и события |
|
|
В компоненте MapX (IngeoMapX.ocx) есть возможность подключится к событиям Ингео. В данном случае речь идёт о событиях создания/изменения/удаления пространственного объекта ингео.
Но похоже, что события срабатывают только для MapX, который собственно и создаёт/изменяет/удаляет объекты, а не как в скриптах Ингео - не важно в каком процессе создали объект, все клиенты получат это сообщение.
Собственно вопрос: MapXи не должен получать от сервера (и потом генерировать в своём процессе) события об изменении объектов, произошедшие в других клиентах (Ингео или MapX)?
код для теста (С#)
Код: |
[TestClass]
public class UnitTest1
{
string testMethod1Log;
[TestMethod]
public void TestMethod1()
{
testMethod1Log = "";
IngeoMapX.IngeoMapXControl mapx = new IngeoMapX.IngeoMapXControl();
mapx.SpatialServer = "";
mapx.SpatialDbID = "{948159FA-78EA-4A05-A3AF-EFF5371A875F}";
mapx.SpatialLogonName = "Администратор";
mapx.SpatialLogonPassword = "";
mapx.DbActive = true;
mapx.DbMapObjectsCreateComplete += mapx_DbMapObjectsCreateComplete;
mapx.DbMapObjectsDeleteComplete += mapx_DbMapObjectsDeleteComplete;
{
IngeoMapX.IngeoMapXControl mapx2 = new IngeoMapX.IngeoMapXControl();
mapx2.SpatialServer = "";
mapx2.SpatialDbID = "{948159FA-78EA-4A05-A3AF-EFF5371A875F}";
mapx2.SpatialLogonName = "Администратор";
mapx2.SpatialLogonPassword = "";
mapx2.DbActive = true;
var mo = mapx2.Ingeo.ActiveDb.MapObjects;
var o = mo.AddObject("00130000047F");//Данные Росреестра - Буфер загрузки\Земельные участки
string OID = o.ID;
var shape = o.Shapes.Insert(0, "001300000481");//Граница исходных ЗУ опред
var cp = shape.Contour.Insert(0);
cp.InsertVertex(-1, 1000, 1000, 0);
cp.InsertVertex(-1, 1000, 2000, 0);
cp.InsertVertex(-1, 2000, 2000, 0);
cp.InsertVertex(-1, 2000, 1000, 0);
cp.Closed = true;
mo.UpdateChanges();
mo = mapx2.Ingeo.ActiveDb.MapObjects;
mo.DeleteObject(OID);
mo.UpdateChanges();
}
mapx.DbMapObjectsDeleteComplete -= mapx_DbMapObjectsDeleteComplete;
mapx.DbMapObjectsCreateComplete -= mapx_DbMapObjectsCreateComplete;
mapx.DbActive = false;
/// Thread.Sleep(1000*60*5);
string expected = "DbMapObjectsCreateComplete; DbMapObjectsDeleteComplete; ";
Assert.AreEqual(expected, testMethod1Log);
}
void mapx_DbMapObjectsDeleteComplete(string aMapObjectID, bool aMy)
{
testMethod1Log += "DbMapObjectsDeleteComplete; ";
}
void mapx_DbMapObjectsCreateComplete(string aMapObjectID, bool aMy)
{
testMethod1Log += "DbMapObjectsCreateComplete; ";
}
}
|
есть аналог на делфе, могу тоже выложить... _________________ ОАО "Самара-Информспутник",
инженер-программист Попов Артем |
|
Вернуться к началу |
|
 |
Михаил Власов

Зарегистрирован: 14.02.2005 Сообщения: 580 Откуда: ИНТЕГРО
|
Добавлено: Ср 04 Сен 2013 11:10 Заголовок сообщения: |
|
|
Обработка событий от сервера выполняется в цикле обработки оконных сообщений (message loop).
Вместо Thread.Sleep нужно вызывать Application.ProcessMessages (на Delphi). На .Net аналога не помню, но тоже должен быть.
Однако гарантии нет, что сообщения от сервера успеют придти сразу после Commit-a.
Для гарантированной обработки вам надо после Commit-а крутить mesage loop до тех пор, пока не придут оповещения, либо пока не истечет некий лимит времени на ожидание.
Вместо ProcessMessage в модульном тесте можно организовать собственный message loop:
Код: |
var startTime = DateTime.Now;
MSG msg;
eventsTriggered = false;
while(true) {
if(PeekMessage(ref msg, 0, 0, 0)) {
DispatchMessage(ref msg);
}
if(eventsTriggered) {
break;
}
Thread.Sleep(1);
if(DateTime.Now - startTime > timeLimit) {
break;
}
}
Assert(eventsTriggered);
|
_________________ С уважением, Михаил Власов. |
|
Вернуться к началу |
|
 |
APopov
Зарегистрирован: 19.06.2006 Сообщения: 347 Откуда: Самара
|
Добавлено: Ср 04 Сен 2013 14:40 Заголовок сообщения: |
|
|
Спасибо, помогло! _________________ ОАО "Самара-Информспутник",
инженер-программист Попов Артем |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете добавлять приложения в этом форуме Вы можете скачивать файлы в этом форуме
|
|