Olá!
Vou iniciar um projeto agora de notificação desktop. Irá funcionar da seguinte maneira:
- Cada usuário terá este software instalado em sua máquina.
- O ícone do software ficará do lado do relógio
- Cada vez que um usuário ligar a máquina, os usuários irão receber uma notificação que o usuário X está online
- A janela de notificação irá abrir acima da barra do relógio (windows) e eu ainda preciso ver como será no mac.
Minha dúvida é a seguinte, cada vez que um usuário ficar “online” eu guardarei o horário em um banco de dados online.
Para enviar está notificação aos outros usuários é melhor ficar checando a tabela do banco para ver se houve alguma alteração ou tem outra forma para fazer isso sem precisar ficar checando em um determinado espaço de tempo?
Obs: serão máquinas dentro da empresa, em SP e MG.
Fiz uma pesquisa melhor aqui e acho que vou usar Sockets para os disparos.
E como vc vai saber que o windows iniciou ?
Para este item eu ainda não tenho a menor idéia. hehe
Na verdade, acho que eu não preciso verificar se o windows iniciou.
Eu preciso configurar o aplicativo para iniciar com o windows e mac, quando ele iniciar eu verifico a conexão e faço o envio.
mas, por exemplo, e se 3 pessoas compartilham a mesma máquina, como vai saber quem ta usando a máquina ?
Será que tem algum framework pra ver/mexer no AD do windows ?
No caso Guilherme, isso vai ser impossível, pois é uma agência, cada um tem sua máquina de trabalho.
O usuário dessa máquina irá logar no sistema por esse aplicativo desktop.
Se vai usar Socket, vc vai ter um servidor em uma máquina X e as aplicações clientes em cada máquina de usuário na rede.
Então pode criar na aplicação servidor um método que fique testando se há conexão com as outras máquinas. Você teria uma lista com todos os IPs das maquinas de usuarios, e o tal método, faria esse teste através destes IPs.
Quando o teste verificar que uma máquina está On, seu servidor envia uma mensagem para as maquinas de usuarios, e a mesma coisa acontece quando ele encontrar uma máquina que estava On e passou a estar Off.
Você pode realizar esses teste infinitamente, dentro de um while por exemplo, ou por agendamento, a cada 30 segundos, 1 minuto…
Valeu romarcio, vou testar da forma que falou.
Uma dúvida quanto ao servidor, eu preciso criar uma aplicação para rodar no servidor e esta irá disparar as notificações.
Não tenho idéia de como funciona essas aplicações no servidor, como colocar elas para rodarem?
O problema de você usar sockets puros é que você pode ter um problema de rede. Digamos que você queira acessar essa aplicação, hospedada em São Paulo, a partir de Minas Gerais. Se em vez de sockets puros você usar http e colocar uma pequena aplicação Web (que não teria “cara” mas apenas um acesso ao banco de dados) no servidor da intranet da sua empresa, provavelmente seria mais fácil fazer esse acesso.
[quote=italoborges]Para este item eu ainda não tenho a menor idéia. hehe
Na verdade, acho que eu não preciso verificar se o windows iniciou.
Eu preciso configurar o aplicativo para iniciar com o windows e mac, quando ele iniciar eu verifico a conexão e faço o envio.[/quote]
E se o usuário hibernar a máquina dele?
Só para ilustrar o que eu pretendo fazer.
Seria algo como um ponto eletrônico, mas não para fuder com os funcionários, mas sim para ter relatórios de produtividade para a gerência de projetos.
- Servidor online, fora da rede local
- Cada máquina que ligar, em SP ou MG, irá entrar para a lista no server de máquinas online e com isso salvará no banco este log
entanglement, acho quem uma aplicação web intranet seria mais chato de fazer, não?
clone_zealot, não havia pensado nisso! O gerente de projetos terá controle total neste aplicativo, ele poderá adicionar ou retirar horas de determinada máquina. Mas ele ter que controlar isso seria bem ruim. Preciso pensar em uma solução.
[quote=italoborges]Só para ilustrar o que eu pretendo fazer.
Seria algo como um ponto eletrônico, mas não para fuder com os funcionários, mas sim para ter relatórios de produtividade para a gerência de projetos.
- Servidor online, fora da rede local
- Cada máquina que ligar, em SP ou MG, irá entrar para a lista no server de máquinas online e com isso salvará no banco este log
entanglement, acho quem uma aplicação web intranet seria mais chato de fazer, não?
clone_zealot, não havia pensado nisso! O gerente de projetos terá controle total neste aplicativo, ele poderá adicionar ou retirar horas de determinada máquina. Mas ele ter que controlar isso seria bem ruim. Preciso pensar em uma solução.[/quote]
Muito pelo contrário. A aplicaçãio web intranet seria bem boboca, ela nem precisaria de ter uma página visivel (embora fosse interessante ter uma página para o caso em que não se pode instalar a tal aplicação de “verificação se o funcionário está trabalhando ou jogando baralho” no computador do funcionário.
Ela seria, mal comparando, apenas uma servlet, que precisaria ser acessada a cada 30 segundos, com o login do usuário logado. Se a aplicação parar de acessar a tal página, então o usuário não está logado. E se você precisar mandar alguma notificação para ele, então na resposta dessa servlet ou p[agina boboca, mandar o que vocë deseja para o usu[ario.
Vocë precisaria fazer uma aplicação (preferencialmente não em Java no lado client, porque Java é muito pesado para esses casos), talvez em C++/Qt ou C# - que acessaria periodicamente a tal pagina. Eu falo “C++ ou C#” porque é mais fácil acessar aquelas APIs do Windows que dizem qual é o usuário logado e se ele está logado ou deixou a máquina travada e foi tomar um cafezinho.
Como você quer fazer uma versão Mac, então sugiro fazer em C++/Qt. A vantagem é que dá, com um pouco de cuidado, ter o mesmo fonte em C++ para Windows (32/64 bits) e Mac.
Na verdade, isso tudo começou como um projeto na facul, mas vou fazer como TCC, ainda tenho tempo. Vou criar um aplicativo web e um desktop. Teria que ser em java. Mas posso contornar essa versão e fazer em C++.
Em java daria para fazer, certo? Para mac e pc?
Acho que farei uma versão java para teste e depois uma C++ para estudo.