Se os dados estiverem a ser guardados em SQL Server vê os mecanismos de sincronização que existem.
A última vez que utilizei funcionava bastante bem neste cenário:
1. dispositivo estava desligado da rede e usava base de dados local
2. quando se encontrava na rede local (ou com acesso à rede onde está a base de dados central), inicia o mecanismo de sincronização do SQL Server
3. dispositivo pode ser desligado da rede e vai-se embora com toda a informação sincronizada
Se isto não foi uma hipótese, "basta" que (todo) o teu modelo de dados tenha o registo da máquina e timestamp da última atualização (eg nome da máquina, mac address, etc., qualquer coisa única) e assim podes fazer inserts/updates/deletes. Se tiveres uma tabela de controlo com o timestamp da última sincronização por máquina saberá que operações necessitas de fazer. Tem em atenção que deve ser atómico, ou seja, quando sincronizas levas toda a informação necessária para a integridade de um registo.
Não só podes usar threads para isto, como podes incluir um temporizador, por exemplo, a cada 10 minutos verificas se existe condições para fazeres a sincronização (ligação de rede, acesso ao servidor, latência, qualquer outra coisa que aches relevante). Havendo condições podes arrancar com o processo de sincronização com a duração máxima de, por exemplo, 1 minuto. Se durante esse minuto a sincronização concluiu, tudo bem, caso contrário registas na tabela de sincronização o timestamp da última coisa sincronização de um registo (tendo em conta a tal atomicidade para garantir a integridade). Dai a 10 minutos, volta a executar tudo de novo e, havendo condições para sincronizar, arrancas onde havias terminado anteriormente.
↧