Jump to content

Search the Community

Showing results for tags 'socket'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Q&A Desenvolvimento
    • Perguntas e respostas rápidas
  • Desenvolvimento e Banco de Dados
    • HTML e CSS
    • Java
    • Javascript
    • .NET
    • PHP
    • Python
    • Ruby
    • Mobile
    • Ambientes de Desenvolvimento
    • Arquitetura e Métodos Ágeis
    • Banco de Dados
    • DevOps
    • Desenvolvimento de Games
    • E-Commerce e Pagamentos Online
    • SEO e Otimizações
    • WordPress
    • Algoritmos & Outras Tecnologias
  • Design e Produto
    • Fotografia
    • Photoshop
    • Design de interfaces e UX
    • Edição/Produção de Vídeos
    • Marketing Online
    • Desenho, Ilustração e 3D
  • Entretenimento e uso pessoal
    • Geral
    • Segurança & Malwares
    • Gadgets e wearable
    • Softwares e Apps
    • Entretenimento

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Google+


Hangouts


Skype


Twitter


deviantART


Github


Flickr


LinkedIn


Pinterest


Facebook


Site Pessoal


Localização


Interesses

Found 10 results

  1. Gilberto Jr

    CHAT SOCKET.IO NODE JS

    Boa noite. Eu fiz esse chat usando socket.io com NODE JS. Esta funcionando perfeito. Porem eu queria implementar duas coisas nele. Queria que quando chegasse uma mensagem, aparecesse uma notificação informando o nome da pessoa que enviou, e também parte da mensagem. E também, quando chegasse uma mensagem, mudar o TITTLE do HTML pra parte da mensagem. Mas isso deve acontecer, somente no browser das pessoas que receberem a mensagem. A pessoa que enviou, não deve receber a notificação e também o nem deve mudar o TITLE da pagina HTML. Abaixo segue o código do FRONT END. <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Chat Sistema Distribuido</title> <script src="jquery.min.js"></script> <script src="socket.io.js"></script> <link rel="stylesheet" href="style.css"> </head> <body> <form id="chat"> <input type="text" name="username" placeholder="Digite seu usuário"> <div class="messages"></div> <input type="text" name="message" placeholder="Digite sua mensagem"> <button type="submit">Enviar</button> </form> <script type="text/javascript"> var socket = io('http://localhost:3000'); function renderMessage(message){ $('.messages').append('<div class="message"><strong>'+ message.author +'</strong>:<br/>&nbsp&nbsp'+ message.message +'</div>') }; socket.on('previousMessages', function(messages){ for(message of messages){ renderMessage(message); }; }); socket.on('receivedMessage', function(message){ renderMessage(message); }); $('#chat').submit(function(event){ event.preventDefault(); var author = $('input[name=username]').val(); var message = $('input[name=message]').val(); if(author.length && message.length){ var messageObject = { author: author, message: message, }; renderMessage(messageObject); socket.emit('sendMessage', messageObject); } }); </script> </body> </html> Abaixo o código da pagina server.js const express = require('express'); const path = require('path'); const app = express(); const server = require('http').createServer(app); const io = require('socket.io')(server); app.use(express.static(path.join(__dirname, 'public'))); app.set('views', path.join(__dirname, 'public')); app.engine('html', require('ejs').renderFile); app.set('view engine', 'html'); app.use('/', (req, res) => { res.render('index.html'); }); let messages = []; io.on('connection', socket => { console.log(`Socket Conectado: ${socket.id}`); socket.emit('previousMessages', messages); socket.on('sendMessage', data =>{ messages.push(data); socket.broadcast.emit('receivedMessage', data); }); }); server.listen(3000); Se alguém puder me ajudar. Obrado Gilberto Jr
  2. Olá, eu tenho 2 servidores com IP diferentes e usuários distribuídos entre os dois eu gostaria de saber oque eu posso fazer para que o usuário que esta conectado no servidor 1 possa se comunicar com o usuário que está no servidor 2 sem usar MySql.
  3. Olá, bom dia, boa tarde ou boa noite, estou tendo um problema, com um sistema que estou criando, agradeço a quem puder ajudar. Então, esse sistema basicamente passa um "protocolo" para os servidor e ele retorna um objeto, e vice-versa, porém, ao finalizar o cliente e reabrir sem fazer o mesmo com o servidor, é causado um erro no servidor, e ao tentar fazer algum retorno de um objeto após re-abrir o cliente é causado um erro. Erro no server ao fechar o cliente: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:210) at java.net.SocketInputStream.read(SocketInputStream.java:141) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) at java.io.InputStreamReader.read(InputStreamReader.java:184) at java.io.BufferedReader.fill(BufferedReader.java:161) at java.io.BufferedReader.readLine(BufferedReader.java:324) at java.io.BufferedReader.readLine(BufferedReader.java:389) at main.java.Manager.run(Manager.java:45) Erro no cliente ao reabrir e tentar obter o objeto: java.io.StreamCorruptedException: invalid stream header: 73720013 at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:866) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:358) at main.java.controllers.VendedoresUI.load(VendedoresUI.java:69) at main.java.controllers.VendedoresUI.initialize(VendedoresUI.java:54) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) at main.java.controllers.Controller.loadUI(Controller.java:150) at main.java.controllers.Controller.changeUI(Controller.java:111) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769) at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3470) at javafx.scene.Scene$ClickGenerator.access$8100(Scene.java:3398) at javafx.scene.Scene$MouseHandler.process(Scene.java:3766) at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432) at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431) at com.sun.glass.ui.View.handleMouseEvent(View.java:555) at com.sun.glass.ui.View.notifyMouse(View.java:937) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177) at java.lang.Thread.run(Thread.java:748) 1. Classes do server: 1.1. Server.java public class Server extends Thread{ public Server(){} public void run() { try{ ServerSocket listener = new ServerSocket(4444); listener.setSoTimeout(0); System.out.println("Server is now running"); try { while (true) { Socket socket = listener.accept(); new Manager(socket).start(); } } finally { listener.close(); } } catch (IOException ioexception){ System.out.println("\u001B[31mError opening server, more info: "); System.out.println(ioexception); System.out.println("Closing server..."); System.exit(0); } } } 1.2. Manager.java public class Manager extends Thread{ private Socket socket; private BufferedReader in; private PrintWriter out; public Manager(Socket socket){ this.socket = socket; System.out.println("\u001B[32m" + socket.getLocalAddress() + ":" + socket.getPort() + " connected"); } @Override public void run() { try { out = new PrintWriter(socket.getOutputStream(), true); out.println("Connected"); while(true) { ObjectOutputStream objectOutput = new ObjectOutputStream(socket.getOutputStream()); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); if(in.readLine().contains(Protocols.VENDEDOR_GET_ALL)) { ResultSet res = SQLManager.Query("SELECT * FROM vendedores"); List<Vendedor> list = new ArrayList<>(); while (res.next()) { Vendedor vendedor = new Vendedor(); vendedor.setNOME(res.getString("NOME")); vendedor.setCPF(res.getString("CPF")); vendedor.setCONTATO(res.getString("CONTATO")); vendedor.setCONTA(res.getInt("CONTA")); vendedor.setBANCO(res.getInt("BANCO")); vendedor.setAGENCIA(res.getString("AGENCIA")); vendedor.setCORRENTE(res.getString("CORRENTE")); list.add(vendedor); } objectOutput.writeObject(list); } objectOutput.flush(); } } catch (IOException e) { System.out.println("\u001B[31m" + socket.getLocalAddress() + ":" + socket.getPort() + " disconnected"); e.printStackTrace(); interrupt(); } catch (SQLException | ClassNotFoundException e) { Logger.getLogger(Manager.class.getName()).log(Level.SEVERE, null, e); } } } 2. Classes do Client 2.1. ClientSocket.java public class ClientSocket { private static Socket socket = null; private static BufferedReader in; private static PrintWriter out; public static void load(){ try { socket = new Socket("127.0.0.1", 4444); in = new BufferedReader( new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(), true); System.out.print(ClientSocket.getIn().readLine()); } catch(IOException ioexception){ Logger.getLogger(ClientSocket.class.getName()).log(Level.SEVERE, null, ioexception); } } public static Socket getSocket() { return socket; } public static BufferedReader getIn() { return in; } public static PrintWriter getOut() { return out; } } 2.2 VendedoresUI.java public class VendedoresUI implements Initializable { @FXML private TableView<Vendedor> table; @FXML private TableColumn<?, ?> colName; @FXML private TableColumn<?, ?> colCPF; @FXML private TableColumn<?, ?> colContato; @FXML private TableColumn<?, ?> colConta; @FXML private TableColumn<?, ?> colBanco; @FXML private TableColumn<?, ?> colAgencia; @FXML private TableColumn<?, ?> colCorrente; ObservableList<Vendedor> list; @Override public void initialize(URL location, ResourceBundle resources) { load(); } private void load(){ try { if(ClientSocket.getSocket().isClosed()){ ClientSocket.load(); } PrintWriter escritor = new PrintWriter(ClientSocket.getSocket().getOutputStream(), true); escritor.println(Protocols.VENDEDOR_GET_ALL); ObjectInputStream obi = new ObjectInputStream(ClientSocket.getSocket().getInputStream()); List<Vendedor> mList = (List<Vendedor>) obi.readObject(); list = FXCollections.observableArrayList(mList); colName.setCellValueFactory(new PropertyValueFactory<>("NOME")); colCPF.setCellValueFactory(new PropertyValueFactory<>("CPF")); colContato.setCellValueFactory(new PropertyValueFactory<>("CONTATO")); colConta.setCellValueFactory(new PropertyValueFactory<>("CONTA")); colBanco.setCellValueFactory(new PropertyValueFactory<>("BANCO")); colAgencia.setCellValueFactory(new PropertyValueFactory<>("AGENCIA")); colCorrente.setCellValueFactory(new PropertyValueFactory<>("CORRENTE")); table.setItems(list); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } }
  4. Possuo uma MainFrame e uma classe Cliente e estou tentando fazer uma conexão servidor/cliente. Integrei o servidor dentro da MainFrame e gostaria de enviar mensagens para meu cliente, de forma que o cliente receba mensagens com valores dentro da mainFrame. Dentro da main eu abri a conexão Socket: ServerSocket server = new ServerSocket(3001); Socket s = server.accept(); System.out.println("Conectado!"); DataOutputStream dcs = new DataOutputStream(s.getOutputStream()); dcs.writeUTF("Bem vindo, você se conectou!"); E possuo a classe Leitor: public class Leitor extends SwingWorker<Void, Double> { Random rand = new Random(); @Override protected Void doInBackground() throws InterruptedException, IOException { while (!flag) { Double valor =(rand.nextDouble() * 100); publish(valor); if (valor > 90) { newlbl.setText ("A temperatura está alta!"); } else if (valor < 15) { newlbl.setText ("A temperatura está baixa!"); } if(valor >15 & valor <90) { newlbl.setText("Temperatura estável"); } Thread.sleep(7500); } return null; } Gostaria que em cada if dentro da void doInBackground eu pudesse enviar a mesma mensagem que eu estou setando(vai ficar se atualizando sempre, pois estou gerando valores aleatorios), usando o dcs.writeUTF(), porém preciso que a classe leitor possuo o Socket s, e o dataOutputStream dcs. Qual seria a solução? Essa é minha class Cliente.java: public static void main(String[] args) { try { Socket s = new Socket("127.0.0.1", 3001); DataInputStream dis = new DataInputStream(s.getInputStream()); String msg = dis.readUTF(); System.out.println(msg); }catch (Exception e){} }
  5. WBS DIGITAL

    Criar properties para chamar ip e porta

    Estou tentando chamar o ip e porta atraves de um arquivo properties num sisteminha de chat criado em java, mas não estou conseguindo fazer isso, segue o codigo. Servidor chat public static void main(String[] args) throws IOException{ wbsCliente = new Vector(); try { ServerSocket s = new ServerSocket(2222); while (true){ System.out.print("Aguardando usuarios..."); Socket wbsConexao = s.accept(); System.out.println("Conectado!"); Thread t = new WbsChatSocket (wbsConexao); t.start(); } } catch(IOException e) { System.out.println("IOException:" + e); } } Cliente Chat public static void main(String[] args){ try { Properties pos = new Properties(); //carregas as propriedades do arquivo de configuracoes pos.load( new FileInputStream("wbsDados.properties") ); //não sei como colocar e chamar os dados do properties neste socket abaixo Socket wbsConexao = new Socket("127.0.0.1", 2222); PrintStream saida = new PrintStream(wbsConexao.getOutputStream()); BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Entre com o seu nome: "); String wbsUsuario = teclado.readLine(); saida.println(wbsUsuario); Thread t = new wbsClienteSocket(wbsConexao); t.start(); String linha; while (true) { System.out.print("> "); linha = teclado.readLine(); // antes de enviar, verifica se a conexão não foi fechada if (done) {break;} // envia para o servidor saida.println(linha); } } catch (IOException e) { // Caso ocorra alguma excessão de E/S, mostre qual foi. System.out.println("IOException: " + e); } }
  6. bruno nozé

    mudar socket para udp

    bom dia, estou convertendo este socket de tcp para udp para receber dados de um rastreador, alterei para socket_dgram e também o socket recv para socket_recvfrom, mas não esta chegando nada alguem pode me ajudar? /** * Creates a server socket and listens for incoming client connections * @param string $address The address to listen on * @param int $port The port to listen on */ function server_loop($address, $port) { GLOBAL $fh; GLOBAL $__server_listening; printLog($fh, "server_looping..."); if(($sock = socket_create(AF_INET,SOCK_DGRAM,0))) { printLog($fh, "failed to create socket: ".socket_strerror($sock)); exit(); } if(($ret = socket_bind($sock, $address, $port)) < 0) { printLog($fh, "failed to bind socket: ".socket_strerror($ret)); exit(); } socket_set_nonblock($sock); printLog($fh, "waiting for clients to connect..."); while ($__server_listening) { $connection = @socket_recvfrom($sock); if ($connection === false) { usleep(100); } elseif ($connection > 0) { handle_client($sock, $connection); } else { printLog($fh, "error: ".socket_strerror($connection)); die; } } }
  7. Henrique.antonio.buzin

    Socket Enviar e Receber Dados via TCP/IP

    Olá, estou criando uma aplicação que vai precisa enviar e receber informações via tcp/ip pelo php, vi que o php socket consegue fazer isso, mas estou tendo problemas em entender como fazer uma página que recebe, se não tem que fechar conexão, se a página que manda está errada, se abre a conexão nos dois, enfim, como fazer para receber esses dados. <?php error_reporting(E_ALL); echo "<h2>TCP/IP Connection</h2>\n"; /* Get the port for the WWW service. */ $service_port = getservbyname('www', 'tcp'); /* Get the IP address for the target host. */ $address = gethostbyname('localhost'); /* Create a TCP/IP socket. */ $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; } else { echo "OK.\n"; } echo "Attempting to connect to '$address' on port '$service_port'..."; $result = socket_connect($socket, $address, $service_port); if ($result === false) { echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; } else { echo "OK.\n"; } $in = "HEAD / HTTP/1.1\r\n"; $in .= "Host: www.example.com\r\n"; $in .= "Connection: Close\r\n\r\n"; $out = ''; echo "Sending HTTP HEAD request..."; socket_write($socket, $in, strlen($in)); echo "OK.\n"; echo "Reading response:\n\n"; while ($out = socket_read($socket, 2048)) { echo $out; } echo "Closing socket..."; // socket_close($socket); echo "OK.\n\n"; ?> Agradeço desde já!
  8. Ola pessoal boa tardem estou a 2 dias tenando buscar ajuda ao nosso Amigo Google com o seguinte problema, e nada de encontrar solução para o mesmo. O problema: Tenho um Script que teoricamente é para ser executado ao Iniciar o Servidor Linux através do Cron: @reboot php -q /var/www/server/scriptAQUI.php Porem o mesmo Inicia e me parece que ele não esta executando o Script corretamente pois ele inicia o mesmo e para logo apos, justo que se eu tentar executar o script via terminal ele da como que a porta do mesmo ja esta sendo utilizada. Os testes; Quando inicio ele com php -q /var/www/server/script.php direto do terminal ele funciona normalmente; Ja tentei colocar @reboot /usr/bin/php -q /var/www/server/scriptAQUI.php e nada também. Caso queiram posso estar postando o script PHP feito, com o socket rodando.
  9. bruno nozé

    socket php

    alguem pode me judar com este socket, preciso pegar as informações que vem na string 12 deste equipamento, como faço isso? #!/usr/bin/php -q <?php //waiting for system startup //crontab: @reboot php -q /var/www/server/tracker.php //sleep (180); /** * Listens for requests and forks on each connection */ $tipoLog = "arquivo"; // tela //debug log, escreve na tela ou no arquivo de log. $fh = null; $remip = null; $remport = null; $imei = ''; /*if ($tipoLog == "arquivo") { //Criando arquivo de log $fn = $_SERVER['DOCUMENT_ROOT']."/sites/1/logs/" . "Log_". date("dmyhis") .".log"; $fh = fopen($fn, 'w') or die ("Can not create file"); $tempstr = "Log Inicio".chr(13).chr(10); fwrite($fh, $tempstr); }*/ function abrirArquivoLog($imeiLog) { GLOBAL $fh; //$fn = ".".dirname(__FILE__)."/sites/1/logs/Log_". trim($imeiLog) .".log"; $fn = "./var/www/sites/1/logs/Log_". trim($imeiLog) .".log"; $fn = trim($fn); $fh = fopen($fn, 'a') or die ("Can not create file"); $tempstr = "Log Inicio".chr(13).chr(10); fwrite($fh, $tempstr); } function fecharArquivoLog() { GLOBAL $fh; if ($fh != null) fclose($fh); } function printLog( $fh, $mensagem ) { GLOBAL $tipoLog; GLOBAL $fh; if ($tipoLog == "arquivo") { //escreve no arquivo if ($fh != null) fwrite($fh, $mensagem.chr(13).chr(10)); } else { //escreve na tela echo $mensagem."<br />"; } } //$cnx = mysql_connect("localhost", "user1", "pass1") // or die("Could not connect: " . mysql_error()); //mysql_select_db('tracker', $cnx); //$res = mysql_query("select valor from preferencias where nome = 'host_apn'", $cnx); //$dataIp = mysql_fetch_assoc($res); //$res = mysql_query("select valor from preferencias where nome = 'port_apn'", $cnx); //$dataPorta = mysql_fetch_assoc($res); //$res = mysql_query("select valor from preferencias where nome = 'email_alertas'", $cnx); //$dataEmail = mysql_fetch_assoc($res); // IP Local //$ip = $dataIp['valor']; $ip = '23.89.198.254'; // Port //$port = $dataPorta['valor']; $port = '7095'; // Path to look for files with commands to send $command_path = "./var/www/sites/1/"; //$from_email = $dataEmail['valor']; $from_email = 'josenilsontrindade@gmail.com'; //mysql_close($cnx); $__server_listening = true; error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); declare(ticks = 1); ini_set('sendmail_from', $from_email); //printLog($fh, "become_daemon() in"); become_daemon(); //printLog($fh, "become_daemon() out"); /* nobody/nogroup, change to your host's uid/gid of the non-priv user ** Comment by Andrew - I could not get this to work, i commented it out the code still works fine but mine does not run as a priv user anyway.... uncommented for completeness */ //change_identity(65534, 65534); /* handle signals */ pcntl_signal(SIGTERM, 'sig_handler'); pcntl_signal(SIGINT, 'sig_handler'); pcntl_signal(SIGCHLD, 'sig_handler'); //printLog($fh, "pcntl_signal ok"); /* change this to your own host / port */ //printLog($fh, "server_loop in"); server_loop($ip, $port); //Finalizando arquivo //fclose($fh); /** * Change the identity to a non-priv user */ function change_identity( $uid, $gid ) { if( !posix_setgid( $gid ) ) { print "Unable to setgid to " . $gid . "!\n"; exit; } if( !posix_setuid( $uid ) ) { print "Unable to setuid to " . $uid . "!\n"; exit; } } /** * Creates a server socket and listens for incoming client connections * @param string $address The address to listen on * @param int $port The port to listen on */ function server_loop($address, $port) { GLOBAL $fh; GLOBAL $__server_listening; printLog($fh, "server_looping..."); if(($sock = socket_create(AF_INET, SOCK_STREAM, 0)) < 0) { printLog($fh, "failed to create socket: ".socket_strerror($sock)); exit(); } if(($ret = socket_bind($sock, $address, $port)) < 0) { printLog($fh, "failed to bind socket: ".socket_strerror($ret)); exit(); } if( ( $ret = socket_listen( $sock, 0 ) ) < 0 ) { printLog($fh, "failed to listen to socket: ".socket_strerror($ret)); exit(); } socket_set_nonblock($sock); printLog($fh, "waiting for clients to connect..."); while ($__server_listening) { $connection = @socket_accept($sock); if ($connection === false) { usleep(100); } elseif ($connection > 0) { handle_client($sock, $connection); } else { printLog($fh, "error: ".socket_strerror($connection)); die; } } } /** * Signal handler */ function sig_handler($sig) { switch($sig) { case SIGTERM: case SIGINT: //exit(); break; case SIGCHLD: pcntl_waitpid(-1, $status); break; } } $firstInteraction = false; /** * Handle a new client connection */ function handle_client($ssock, $csock) { GLOBAL $__server_listening; GLOBAL $fh; GLOBAL $firstInteraction; GLOBAL $remip; GLOBAL $remport; $pid = pcntl_fork(); if ($pid == -1) { /* fork failed */ //printLog($fh, "fork failure!"); die; } elseif ($pid == 0) { /* child process */ $__server_listening = false; socket_getpeername($csock, $remip, $remport); //printLog($fh, date("d-m-y h:i:sa") . " Connection from $remip:$remport"); $firstInteraction = true; socket_close($ssock); interact($csock); socket_close($csock); printLog($fh, date("d-m-y h:i:sa") . " Connection to $remip:$remport closed"); fecharArquivoLog(); } else { socket_close($csock); } } function interact($socket) { GLOBAL $fh; GLOBAL $command_path; GLOBAL $firstInteraction; GLOBAL $remip; GLOBAL $remport; $loopcount = 0; $conn_imei = ""; /* TALK TO YOUR CLIENT */ $rec = ""; // Variavel que indica se comando est� em banco ou arquivo. $tipoComando = "arquivo"; //"arquivo"; //Checando o protocolo $isGIMEI = false; $isGPRMC = false; $send_cmd = ""; # Read the socket but don't wait for data.. while (@socket_recv($socket, $rec, 2048, 0x40) !== 0) { # If we know the imei of the phone and there is a pending command send it. if ($conn_imei != "") { if ($tipoComando == "arquivo" and file_exists("$command_path/$conn_imei")) { $send_cmd = file_get_contents("$command_path/$conn_imei"); socket_send($socket, $send_cmd, strlen($send_cmd), 0); unlink("$command_path/$conn_imei"); printLog($fh, "Arquivo de comandos apagado: " . $send_cmd . " imei: " . $conn_imei); } else { if ($tipoComando == "banco" and file_exists("$command_path/$conn_imei")) { //Conecta e pega o comando pendente $cnx = mysql_connect("localhost", "user1", "pass1") or die("Could not connect: " . mysql_error()); mysql_select_db('tracker', $cnx); $res = mysql_query("SELECT c.command FROM command c WHERE c.imei = '$conn_imei' ORDER BY date DESC LIMIT 1", $cnx); while($data = mysql_fetch_assoc($res)) { $send_cmd = $data['command']; echo 'acessou o comando'; } // Deletando comando //mysql_query("DELETE FROM command WHERE imei = $conn_imei"); mysql_close($cnx); socket_send($socket, $send_cmd, strlen($send_cmd), 0); unlink("$command_path/$conn_imei"); printLog($fh, "Comandos do arquivo apagado: " . $send_cmd . " imei: " . $conn_imei); } else { //Se nao tiver comando na fila e for a primeira iteracao, obtem o ultimo comando v�lido enviado if ($firstInteraction == true) { sleep (1); $send_cmd = "**,imei:". $conn_imei .",C,02m"; //Obtendo o ultimo comando $cnx = mysql_connect("localhost", "user1", "pass1") or die("Could not connect: " . mysql_error()); mysql_select_db('tracker', $cnx); $res = mysql_query("SELECT c.command FROM command c WHERE c.command like '**,imei:". $conn_imei .",C,%' and c.imei = $conn_imei ORDER BY date DESC LIMIT 1", $cnx); while($data = mysql_fetch_assoc($res)) { $send_cmd = $data['command']; } mysql_close($cnx); socket_send($socket, $send_cmd, strlen($send_cmd), 0); printLog($fh, "Comando de start: " . $send_cmd . " imei: " . $conn_imei); $firstInteraction = false; } } } // Comando enviado printLog($fh, date("d-m-y h:i:sa") . " Sent: $send_cmd"); } # Some pacing to ensure we don't split any incoming data. sleep (1); # Timeout the socket if it's not talking... # Prevents duplicate connections, confusing the send commands $loopcount++; if ($loopcount > 120) return; #remove any whitespace from ends of string. $cnx = mysql_connect("localhost", "user1", "pass1"); mysql_select_db('tracker', $cnx); if ($rec != "") { $rec = trim($rec); if (strpos($rec, "GPRMC") === false) { /* M�DULO IMEI GEN�RICO */ $isGIMEI = true; $loopcount = 0; if ($fh != null) printLog($fh, date("d-m-y h:i:sa") . " Got : $rec"); $parts = explode(',',$rec); if (strpos($parts[0], "#") === FALSE) { /* Andrew's tracker is different.... Array ( [0] => imei:354779030525274 [1] => tracker [2] => 0909221022 [3] => +61417801658 [4] => F [5] => 022234.000 [6] => A [7] => 3506.5232 [8] => S [9] => 13829.5988 [10] => E [11] => 0.00 [12] => ) */ # $imei = substr($parts[0],0, -1); # Only worry about the rest if there is data to get if (count($parts) > 1) { $imei = substr($parts[0],5); $infotext = mysql_real_escape_string($parts[1]); $trackerdate = mysql_real_escape_string($parts[2]); $gpsSignalIndicator = mysql_real_escape_string($parts[4]); $speed = 0; //Se gpsSignalIndicator <> L, pega o outros dados if ($gpsSignalIndicator != 'L') { $phone = mysql_real_escape_string($parts[3]); $satelliteFixStatus = mysql_real_escape_string($parts[6]); $latitudeDecimalDegrees = mysql_real_escape_string($parts[7]); $latitudeHemisphere = mysql_real_escape_string($parts[8]); $longitudeDecimalDegrees = mysql_real_escape_string($parts[9]); $longitudeHemisphere = mysql_real_escape_string($parts[10]); $speed = mysql_real_escape_string($parts[11]); } //inicio verifica geofence mysql_select_db('tracker', $cnx); $texto_sms_localiza = ""; $texto_sms_alerta_hodometro = ""; $texto_sms_alerta = ""; $result = mysql_query("select * from preferencias", $cnx); while ($dataPref = mysql_fetch_assoc($result)){ if($dataPref['nome'] == 'texto_sms_localiza') $texto_sms_localiza = $dataPref['valor']; if($dataPref['nome'] == 'texto_sms_alerta_hodometro') $texto_sms_alerta_hodometro = $dataPref['valor']; if($dataPref['nome'] == 'texto_sms_alerta') $texto_sms_alerta = $dataPref['valor']; } if ( $imei != "" ) { $consulta = mysql_query("SELECT * FROM geo_fence WHERE imei = '$imei'", $cnx); while($data = mysql_fetch_assoc($consulta)) { $idCerca = $data['id']; $imeiCerca = $data['imei']; $nomeCerca = $data['nome']; $coordenadasCerca = $data['coordenadas']; $resultCerca = $data['tipo']; $tipoEnvio = $data['tipoEnvio']; strlen($latitudeDecimalDegrees) == 9 && $latitudeDecimalDegrees = '0'.$latitudeDecimalDegrees; $g = substr($latitudeDecimalDegrees,0,3); $d = substr($latitudeDecimalDegrees,3); $strLatitudeDecimalDegrees = $g + ($d/60); $latitudeHemisphere == "S" && $strLatitudeDecimalDegrees = $strLatitudeDecimalDegrees * -1; strlen($longitudeDecimalDegrees) == 9 && $longitudeDecimalDegrees = '0'.$longitudeDecimalDegrees; $g = substr($longitudeDecimalDegrees,0,3); $d = substr($longitudeDecimalDegrees,3); $strLongitudeDecimalDegrees = $g + ($d/60); $longitudeHemisphere == "S" && $strLongitudeDecimalDegrees = $strLongitudeDecimalDegrees * -1; $strLongitudeDecimalDegrees = $strLongitudeDecimalDegrees * -1; $lat_point = $strLatitudeDecimalDegrees; $lng_point = $strLongitudeDecimalDegrees; $exp = explode("|", $coordenadasCerca); if( ( count($exp) ) < 5 ) { $strExp = explode(",", $exp[0]); $strExp1 = explode(",", $exp[2]); } else { $int = (count($exp)) / 2; $strExp = explode(",", $exp[0]); $strExp1 = explode(",", $exp[$int]); } $lat_vertice_1 = $strExp[0]; $lng_vertice_1 = $strExp[1]; $lat_vertice_2 = $strExp1[0]; $lng_vertice_2 = $strExp1[1]; if ( $lat_vertice_1 < $lat_point Or $lat_point < $lat_vertice_2 And $lng_point < $lng_vertice_1 Or $lng_vertice_2 < $lng_point ) { $result = '0'; $situacao = 'fora'; } else { $result = '1'; $situacao = 'dentro'; } if ( $result <> $resultCerca And round($speed * 1.852,0) > 0 ) { mysql_query("INSERT INTO message (imei, message) VALUES ('$imei', 'Cerca ". $nomeCerca ." Violada!')", $cnx); if ( $tipoEnvio == 0 ) { # Convert the GPS coordinates to a human readable address $tempstr = "http://www.systemtracker.com.br\">www.systemtracker.com.br</a></p>"; $msg .= "</body>"; $msg .= "</html>"; $mail = new PHPMailer(); $mail->Mailer = "smtp"; $mail->IsHTML(true); $mail->CharSet = "utf-8"; $mail->SMTPSecure = "tls"; $mail->Host = "smtp.gmail.com"; $mail->Port = "587"; $mail->SMTPAuth = "true"; $mail->Username = "josenilsontrindade@gmail.com"; $mail->Password = "jnt99971387"; $mail->From = "josenilsontrindade@gmail.com"; $mail->FromName = "System Tracker"; $mail->AddAddress($emailDestino); $mail->AddReplyTo($mail->From, $mail->FromName); $mail->Subject = "System Tracker - Alerta de Violacao de Perimetro"; $mail->Body = $msg; if (!$mail->Send()) { echo "Erro de envio: ". $mail->ErrorInfo; } else { echo "Mensagem enviada com sucesso!"; } } } } } } // if imei //final verifica geofence $dataBem = null; $dataCliente = null; $resBem = mysql_query("select id, cliente, envia_sms, name, alerta_hodometro, alerta_hodometro_saldo from bem where imei = '$imei'", $cnx); $dataBem = mysql_fetch_assoc($resBem); $resCliente = mysql_query("select id, celular, dt_ultm_sms, envia_sms, sms_acada, hour(timediff(now(), dt_ultm_sms)) horas, minute(timediff(now(), dt_ultm_sms)) minutos, nome from cliente where id = $dataBem[cliente]", $cnx); $dataCliente = mysql_fetch_assoc($resCliente); # Write it to the database... if ($gpsSignalIndicator != 'L') { $movimento = ''; if($speed > 0) $movimento = 'S'; else $movimento = 'N'; $gpsLat = gprsToGps($latitudeDecimalDegrees, $latitudeHemisphere); $gpsLon = gprsToGps($longitudeDecimalDegrees, $longitudeHemisphere); $gpsLatAnt = 0; $gpsLatHemAnt = ''; $gpsLonAnt = 0; $gpsLonHemAnt = ''; $alertaACadaSaldo = 0; $resLocAtual = mysql_query("select id, latitudeDecimalDegrees, latitudeHemisphere, longitudeDecimalDegrees, longitudeHemisphere from loc_atual where imei = '$imei' limit 1", $cnx); $numRows = mysql_num_rows($resLocAtual); if($numRows == 0){ //mysql_query("insert into logs evento values ('ok') "); mysql_query("INSERT INTO loc_atual (date, imei, phone, satelliteFixStatus, latitudeDecimalDegrees, latitudeHemisphere, longitudeDecimalDegrees, longitudeHemisphere, speed, infotext, gpsSignalIndicator, converte) VALUES (now(), '$imei', '$phone', '$satelliteFixStatus', '$latitudeDecimalDegrees', '$latitudeHemisphere', '$longitudeDecimalDegrees', '$longitudeHemisphere', '$speed', '$infotext', '$gpsSignalIndicator', 1)", $cnx); } else { mysql_query("UPDATE loc_atual set date = now(), phone = '$phone', satelliteFixStatus = '$satelliteFixStatus', latitudeDecimalDegrees = '$latitudeDecimalDegrees', latitudeHemisphere = '$latitudeHemisphere', longitudeDecimalDegrees = '$longitudeDecimalDegrees', longitudeHemisphere = '$longitudeHemisphere', speed = '$speed', infotext = '$infotext', gpsSignalIndicator = '$gpsSignalIndicator' where imei = '$imei'", $cnx); } $distance = 0; try{ $bemId = $dataBem[id]; $countGeoDistance = mysql_query("select bem from geo_distance where bem = $bemId", $cnx); if($countGeoDistance === false || mysql_num_rows($countGeoDistance) == 0) { mysql_query("insert into geo_distance (bem, tipo) values($bemId, 'I')", $cnx); mysql_query("insert into geo_distance (bem, tipo) values($bemId, 'F')", $cnx); } /*envio de sms*/ if($dataCliente['envia_sms'] == 'S' && $dataBem['envia_sms'] == 'S' && !empty($dataCliente['celular']) && !empty($dataCliente['sms_acada'])){ if(empty($dataCliente['dt_ultm_sms'])){ mysql_query("update cliente set dt_ultm_sms = now() where id = $dataCliente[id]",$cnx); } else { $horas = $dataCliente['horas']; $minutos = $dataCliente['minutos']; if(!empty($horas)) $horas = $horas * 60; $tempoTotal = $horas+$minutos; if($tempoTotal > $dataCliente['sms_acada']){ $json = json_decode(file_get_contents("http://www.systemtracker.com.br\">www.systemtracker.com.br</a></p>"; $msg .= "</body>"; $msg .= "</html>"; $mail = new PHPMailer(); $mail->Mailer = "smtp"; $mail->IsHTML(true); $mail->CharSet = "utf-8"; $mail->SMTPSecure = "tls"; $mail->Host = "smtp.gmail.com"; $mail->Port = "587"; $mail->SMTPAuth = "true"; $mail->Username = "josenilsontrindade@gmail.com"; $mail->Password = "jnt99971387"; $mail->From = "josenilsontrindade@gmail.com"; $mail->FromName = "System Tracker"; $mail->AddAddress($emailDestino); $mail->AddReplyTo($mail->From, $mail->FromName); $mail->Subject = "System Tracker - Alerta de Violacao de Perimetro"; $mail->Body = $msg; if (!$mail->Send()) { echo "Erro de envio: ". $mail->ErrorInfo; } else { echo "Mensagem enviada com sucesso!"; } } } } } } // if imei //final verifica geofence if($gpsSignalIndicator != 'L') { $movimento = ''; if($speed > 0) $movimento = 'S'; else $movimento = 'N'; $gpsLat = gprsToGps($latitudeDecimalDegrees, $latitudeHemisphere); $gpsLon = gprsToGps($longitudeDecimalDegrees, $longitudeHemisphere); $gpsLatAnt = 0; $gpsLatHemAnt = ''; $gpsLonAnt = 0; $gpsLonHemAnt = ''; $resLocAtual = mysql_query("select id from loc_atual where imei = '$imei' limit 1", $cnx); $numRows = mysql_num_rows($resLocAtual); if($numRows == 0){ mysql_query("INSERT INTO loc_atual (date, imei, phone, satelliteFixStatus, latitudeDecimalDegrees, latitudeHemisphere, longitudeDecimalDegrees, longitudeHemisphere, speed, infotext, gpsSignalIndicator, converte) VALUES (now(), '$imei', '$phone', '$satelliteFixStatus', '$latitudeDecimalDegrees', '$latitudeHemisphere', '$longitudeDecimalDegrees', '$longitudeHemisphere', '$speed', '$infotext', '$gpsSignalIndicator', 1)", $cnx); } else { $dataLocAtual = mysql_fetch_assoc($resLocAtual); $gpsLatAnt = $dataLocAtual[latitudeDecimalDegrees]; $gpsLatHemAnt = $dataLocAtual[latitudeHemisphere]; $gpsLonAnt = $dataLocAtual[longitudeDecimalDegrees]; $gpsLonHemAnt = $dataLocAtual[longitudeHemisphere]; mysql_query("UPDATE loc_atual set date = now(), phone = '$phone', satelliteFixStatus = '$satelliteFixStatus', latitudeDecimalDegrees = '$latitudeDecimalDegrees', latitudeHemisphere = '$latitudeHemisphere', longitudeDecimalDegrees = '$longitudeDecimalDegrees', longitudeHemisphere = '$longitudeHemisphere', speed = '$speed', infotext = '$infotext', gpsSignalIndicator = '$gpsSignalIndicator' where imei = '$imei'", $cnx); } $distance = 0; try{ $bemId = $dataBem[id]; $countGeoDistance = mysql_query("select bem from geo_distance where bem = $bemId", $cnx); if($countGeoDistance === false || mysql_num_rows($countGeoDistance) == 0) { mysql_query("insert into geo_distance (bem, tipo) values($bemId, 'I')", $cnx); mysql_query("insert into geo_distance (bem, tipo) values($bemId, 'F')", $cnx); } /*envio de sms*/ if($dataCliente['envia_sms'] == 'S' && $dataBem['envia_sms'] == 'S' && !empty($dataCliente['celular']) && !empty($dataCliente['sms_acada'])){ if(empty($dataCliente['dt_ultm_sms'])){ mysql_query("update cliente set dt_ultm_sms = now() where id = $dataCliente[id]",$cnx); } else { $horas = $dataCliente['horas']; $minutos = $dataCliente['minutos']; if(!empty($horas)) $horas = $horas * 60; $tempoTotal = $horas+$minutos; if($tempoTotal > $dataCliente['sms_acada']){ $json = json_decode(file_get_contents("http://maps.google.com/maps/api/geocode/json?sensor=false&latlng=$gpsLat,$gpsLon&language=es-ES")); if ( isset( $json->status ) && $json->status == 'OK' && isset($json->results[0]->formatted_address)) { $address = $json->results[0]->formatted_address; $address = utf8_decode($address); $aDataCliente = split(' ', $dataCliente['nome']); $msg = $texto_sms_localiza; $msg = str_replace("#CLIENTE", $aDataCliente[0], $msg); $msg = str_replace("#VEICULO", $dataBem['name'], $msg); $msg = str_replace("#LOCALIZACAO", $address, $msg); $msg = str_replace(' ', '+', $msg); sendSMS($dataCliente['celular'], $msg, ''); if($retorno < 0) mysql_query("insert into controle(texto) values('envio de sms retorno: $retorno')",$cnx); else mysql_query("update cliente set dt_ultm_sms = now() where id = $dataCliente[id]",$cnx); } } } } if($movimento == 'S'){ $resGeoDistance = mysql_query("select parou from geo_distance where bem = $bemId and tipo = 'I'", $cnx); $dataGeoDistance = mysql_fetch_assoc($resGeoDistance); if($dataGeoDistance[parou] == 'S' || empty($dataGeoDistance[parou])){ mysql_query("update geo_distance set latitudeDecimalDegrees = '$latitudeDecimalDegrees', latitudeHemisphere = '$latitudeHemisphere', longitudeDecimalDegrees = '$longitudeDecimalDegrees', longitudeHemisphere = '$longitudeHemisphere', parou = 'N' where bem = $bemId and tipo = 'I'", $cnx); } } else { $resGeoDistance = mysql_query("select latitudeDecimalDegrees, latitudeHemisphere, longitudeDecimalDegrees, longitudeHemisphere from geo_distance where bem = $bemId and tipo = 'I'", $cnx); if(mysql_num_rows($resGeoDistance) > 0){ $update = mysql_query("update geo_distance set latitudeDecimalDegrees = '$latitudeDecimalDegrees', latitudeHemisphere = '$latitudeHemisphere', longitudeDecimalDegrees = '$longitudeDecimalDegrees', longitudeHemisphere = '$longitudeHemisphere', parou = 'S' where bem = $bemId and tipo = 'I'", $cnx); $dataGeoDistance = mysql_fetch_assoc($resGeoDistance); $gpsLatAnt = gprsToGps($dataGeoDistance[latitudeDecimalDegrees], $dataGeoDistance[latitudeHemisphere]); $gpsLonAnt = gprsToGps($dataGeoDistance[longitudeDecimalDegrees], $dataGeoDistance[longitudeHemisphere]); if($gpsLatAnt != $gpsLat) { if($gpsLatAnt != 0 && $gpsLonAnt != 0){ /* $json = json_decode(file_get_contents('http://dev.virtualearth.net/REST/V1/Routes/Driving?o=xml&wp.0=$gpsLatAnt,$gpsLonAnt&wp.1=$gpsLat,$gpsLon&avoid=minimizeTolls&key=AqMJv19uaRKDbu-wSgUt3paCfXETZjBafVBMDXX9Rc4XyqmM6l4R_A8TgEXuWT6G')); if(isset($json->rows[0]->elements[0]->distance)){ } */ /* $json = json_decode(file_get_contents("http://maps.googleapis.com/maps/api/distancematrix/json?sensor=false&origins=$gpsLatAnt,$gpsLonAnt&destinations=$gpsLat,$gpsLon")); if(isset($json->rows[0]->elements[0]->distance)){ $strDistance = $json->rows[0]->elements[0]->distance->value; $distance = $strDistance+0; $alertaACada = $dataBem['alerta_hodometro']; $alertaACadaSaldo = $dataBem['alerta_hodometro_saldo']; $alertaACadaSaldo = ($alertaACadaSaldo*1000) - $distance; if($alertaACadaSaldo <= 0 && $alertaACada > 0){ $msg = $texto_sms_alerta_hodometro; $msg = str_replace("#CLIENTE", $aDataCliente[0], $msg); $msg = str_replace("#VEICULO", $dataBem['name'], $msg); $msg = str_replace("#HODOMETRO", $alertaACada, $msg); $msg = str_replace(' ', '+', $msg); sendSMS($dataCliente['celular'], $msg, ''); $alertaACadaSaldo = $alertaACada; } $alertaACadaSaldo = (int)$alertaACadaSaldo/1000; } */ $geoDistance = distance($gpsLatAnt, $gpsLonAnt, $gpsLat, $gpsLon,'K'); //$strDistance = $json->rows[0]->elements[0]->distance->value; $distance = (int)($geoDistance*1000); $alertaACada = $dataBem['alerta_hodometro']; $alertaACadaSaldo = $dataBem['alerta_hodometro_saldo']; $alertaACadaSaldo = ($alertaACadaSaldo*1000) - $distance; if($alertaACadaSaldo <= 0 && $alertaACada > 0){ $msg = $texto_sms_alerta_hodometro; $msg = str_replace("#CLIENTE", $aDataCliente[0], $msg); $msg = str_replace("#VEICULO", $dataBem['name'], $msg); $msg = str_replace("#HODOMETRO", $alertaACada, $msg); $msg = str_replace(' ', '+', $msg); //sendSMS($dataCliente['celular'], $msg, ''); $alertaACadaSaldo = $alertaACada; } $alertaACadaSaldo = (int)$alertaACadaSaldo/1000; } } } } }catch(Exception $e){ mysql_query("INSERT INTO controle (texto) VALUES ($e->getMessage())", $cnx); } mysql_query("UPDATE bem set date = date, status_sinal = 'R', movimento = '$movimento', hodometro=hodometro+$distance WHERE imei = '$imei'", $cnx); mysql_query("INSERT INTO gprmc (date, imei, phone, satelliteFixStatus, latitudeDecimalDegrees, latitudeHemisphere, longitudeDecimalDegrees, longitudeHemisphere, speed, infotext, gpsSignalIndicator, km_rodado, converte) VALUES (now(), '$imei', '$phone', '$satelliteFixStatus', '$latitudeDecimalDegrees', '$latitudeHemisphere', '$longitudeDecimalDegrees', '$longitudeHemisphere', '$speed', '$infotext', '$gpsSignalIndicator', $distance, 1)", $cnx); } else { mysql_query("UPDATE bem set date = date, status_sinal = 'S' WHERE imei = '$imei'", $cnx); } # Now check to see if we need to send any alerts. if (trim($infotext) != "gprmc") { $res = mysql_query("SELECT responsible FROM bem WHERE imei='$imei'", $cnx); while($data = mysql_fetch_assoc($res)) { switch ($infotext) { case "dt": $body = "Disable Track OK"; break; case "et": $body = "Stop Alarm OK"; break; case "gt"; $body = "Move Alarm set OK"; break; case "help me": $body = "Help!"; mysql_query("INSERT INTO message (imei, message) VALUES ('$imei', 'SOS!')", $cnx); break; case "ht": $body = "Speed alarm set OK"; break; case "it": $body = "Timezone set OK"; break; case "low battery": $body = "Low battery!\nYou have about 2 minutes..."; mysql_query("INSERT INTO message (imei, message) VALUES ('$imei', 'Bat. Fraca')", $cnx); break; case " bat:": $body = "Low battery!\nYou have about 2 minutes..."; mysql_query("INSERT INTO message (imei, message) VALUES ('$imei', 'Bat. Fraca')", $cnx); break; case "Low batt": $body = "Low battery!\nYou have about 2 minutes..."; mysql_query("INSERT INTO message (imei, message) VALUES ('$imei', 'Bat. Fraca')", $cnx); break; case "move": $body = "Move Alarm!"; mysql_query("INSERT INTO message (imei, message) VALUES ('$imei', 'Movimento')", $cnx); break; case "nt": $body = "Returned to SMS mode OK"; break; case "speed": $body = "Speed alarm!"; mysql_query("INSERT INTO message (imei, message) VALUES ('$imei', 'Velocidade')", $cnx); break; case "stockade": $body = "Geofence Violation!"; mysql_query("INSERT INTO message (imei, message) VALUES ('$imei', 'Cerca')", $cnx); break; } //switch //Enviando e-mail de alerta $headers = "From: $email_from" . "\r\n" . "Reply-To: $email_from" . "\r\n"; $responsible = $data['responsible']; $rv = mail($responsible, "Tracker - $imei", $body, $headers); } //while } } else { //GRPMC nao precisa reter a sessao } //No protocolo GPRMC cada nova conex�o � um IP. Enviando comando no fim da conexao, ap�s obter os dados. if (file_exists("$command_path/$conn_imei")) { $send_cmd = file_get_contents("$command_path/$conn_imei"); socket_send($socket, $send_cmd, strlen($send_cmd), 0); mysql_query("DELETE FROM command WHERE imei = $conn_imei"); unlink("$command_path/$conn_imei"); printLog($fh, "Comandos do Banco e Arquivo apagados: " . $send_cmd . " imei: " . $conn_imei); } mysql_close($cnx); break; } } //Checando se utilizou os dois protocolos para uma escuta if ($isGIMEI == true and $isGPRMC == true) { //printLog($fh, "ATENCAO: falha na obtencao do protocolo. Kill pid."); } $rec = ""; } //while } //fim interact /** * Become a daemon by forking and closing the parent */ function become_daemon() { GLOBAL $fh; //printLog($fh, "pcntl_fork() in"); $pid = pcntl_fork(); //printLog($fh, "pcntl_fork() out"); if ($pid == -1) { /* fork failed */ //printLog($fh, "fork failure!"); exit(); } elseif ($pid) { //printLog($fh, "pid: " . $pid); /* close the parent */ exit(); } else { /* child becomes our daemon */ posix_setsid(); chdir('/'); umask(0); return posix_getpid(); } //printLog($fh, "become_daemon() fim"); } function gprsToGps($cord, $hemisphere){ $novaCord = 0; strlen($cord) == 9 && $cord = '0'.$cord; $g = substr($cord,0,3); $d = substr($cord,3); $novaCord = $g + ($d/60); if($hemisphere == "S") $hemisphere == "S" && $novaCord = $novaCord * -1; if($hemisphere == "W") $hemisphere == "W" && $novaCord = $novaCord * -1; return $novaCord; } function sendSMS($contato, $mensagem, $remetente){ $cnx = mysql_connect("localhost", "user1", "pass1") or die("Could not connect: " . mysql_error()); mysql_select_db('tracker', $cnx); $res = mysql_query("select valor from preferencias where nome = 'url_sms'", $cnx); $data = mysql_fetch_assoc($res); $url = $data['valor']; $res = mysql_query("select valor from preferencias where nome = 'usuario_sms'", $cnx); $data = mysql_fetch_assoc($res); $usuario = $data['valor']; $res = mysql_query("select valor from preferencias where nome = 'senha_sms'", $cnx); $data = mysql_fetch_assoc($res); $senha = $data['valor']; $res = mysql_query("select valor from preferencias where nome = 'de_sms'", $cnx); $data = mysql_fetch_assoc($res); $de = $data['valor']; file_get_contents($url."usr=".$usuario."&pwd=".$senha."&number=55".$contato."&sender=".$de."&msg=$mensagem"); } function distance($lat1, $lon1, $lat2, $lon2) { $center_lat = $lat1; $center_lng = $lon1; $lat = $lat2; $lng = $lon2; $distance =( 6371 * acos((cos(deg2rad($center_lat)) ) * (cos(deg2rad($lat))) * (cos(deg2rad($lng) - deg2rad($center_lng)) )+ ((sin(deg2rad($center_lat))) * (sin(deg2rad($lat))))) ); return $distance; /* $theta = $lon1 - $lon2; $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist * 60 * 1.1515; $unit = strtoupper($unit); if ($unit == "K") { return ($miles * 1.609344); } else if ($unit == "N") { return ($miles * 0.8684); } else { return $miles; } */ } ?>
  10. Fala galera, estou aqui para pedir a ajuda de todos voces. Tudo que iremos tentar fazer é criar um chat privado utilizando websockets junto ao php sockets, para adiantar algumas coisas eu ja fiz um chat e disponibilizei no github, voces podem acessar atraves do link abaixo: Esse chat funciona perfeitamente, mas no entanto ele é um chat global, ou seja, uma mensagem enviada por um usuario X, vai para todos os usuarios que estão na sala do chat. Como dito anteriormente a nossa ideia é criar um chat privado, então vamos a algumas considerações: No meu caso estou utilizando os arquivos dentro da pasta easychat (que esta no link enviado anteriormente) Podemos utilizar node.js, socket.io e afins? Não, estou querendo resolver somente com php e javascript puro. Agora chegou a hora de dar uma pincelada no meu codigo: Aplicacao.js Existem duas funções responsaveis por enviar e receber a mensagem do servidor e abaixo estão elas: form.onsubmit = function(e) { e.preventDefault(); // Recuperando a mensagem do textarea. var mensagem = mensagemTexto.value; // Enviando a mensagem através do WebSocket. socket.send(mensagem); // Adicionando a mensagem numa lista de mensagens enviadas. listaMensagem.innerHTML += '<li class="envia"><span>Enviado:</span>' + mensagem + '</li>'; // Limpando o campo da mensagem após o envio. mensagemTexto.value = ''; return false; }; socket.onmessage = function(event) { var mensagem = event.data; listaMensagem.innerHTML += '<li class="recebida"><span>Recebida:</span>' + mensagem + '</li>'; }; Quando enviamos uma mensagem ele executa o comando socket.send(mensagem) ali eu pensei em enviar mais alguns parametros como: IP do usuario (Pode precisar) Chat de onde ele esta acessando (Chat1, Chat2, Chat3) Mensagem (é claro rs) Já no lado do PHP, o comando abaixo é responsavel por pegar a resposta do usuario e retorna-la de volta: Server.php }else{ $bytes = socket_recv($sock, $data, 2048, null); $d = unmask($data); foreach ($cls as $socket) { if($socket != $m_sock && $val > 0){ try{ socket_write($socket,(encode($d))); }catch(Exception $e){ unset($cls[$socket]); socket_close($cls[$socket]); } } } } } Com o comando socket_recv ele consegue captar a mensagem que esta sendo enviada e realiza a função unmask nela, um pouco mais adiante ele faz o encode desta mensagem que recebeu e envia de volta para aquele socket (e todos que estão conectados naquele socket recebem a mensagem). Nesse caso, como nosso chat é privada devemos pensar tambem em fazer o insert e em seguida um select no banco de dados, entao melhor maneira de fazer isso é inserindo esses comandos entre os codigos try e socket_write, então vamos aos testes: ...... try{ //Aqui estabilizamos uma conexão com o banco de dados e inserimos na tabela a mensagem + ip + data + Chat1 (ou 2 ou 3). socket_write($socket,(encode($d))); } ..... Acho que tambem seria melhor criar um campo no banco de dados para verificar se a mensagem foi visualizada ou não? Depois que inserimos no banco de dados chegou a hora do puzzle: Como iremos fazer para retornar a mensagem para aquele determinado usuario? Antes de respondermos a esta pergunta vamos criar um cenario novo e de simples visualização para todos nos: Vamos criar um arquivo php com 2 links: Ir para o Chat 1 & Ir para o Chat 2 Vamos reaproveitar aqueles arquivos dentro da pasta EasyChat Vamos duplicar o arquivo index.php, criando indexChat1.php e IndexChat2.php Ambos os indexs irão utilizar a porta 8080 (assim como esta no github), Não! nos não iremos separar os chats em portas diferentes (tenha em mente que isso é so um teste para realizar algo mais completo lá na frente, IMAGINE 10000 chats privados acontecendo simultaneamente e abrimos uma porta para cada um deles......). Entao apartir deste momento temos 2 indexes diferentes utilizando os mesmos arquivos: aplicacao.js e server.php, no caso do arquivo aplicacao.js ele envia valores diferentes para o socket php como ip, mensagem e o tipo de chat que ele esta inserido, como chat1 ou chat 2. Executandos os Testes OK, vamos abrir o arquivo indexChat1.php em uma aba, e indexChat2.php em outra aba do nosso navegador, vamos inicialmente escrever uma mensagem no chat1, quando fizermos isso (e do jeito que nosso codigo atualmente esta), a mensagem será recebida tambem na aba do chat2, e a mesma coisa aconteceria caso digitarmos algo no chat2. Mas pelo menos no banco de dados esta dá seguinte forma: ID = 0 IP = 32.22.221.22 Local = Chat1 Mensagem = Olá mundo Data = 01/01/2016 Visualizado = false Agora voltamos a seguinte pergunta: Como iremos fazer para os usuarios que estão no chat1, nao receber e nem enviar mensagens para os usuarios que estão no chat2 e virce-versa? Eu acredito que a resposta esta na criação de um codigo que ainda nao sabemos mas que deve ser colocado dentro do arquivo server.php mais especificamente entre os comandos try e socket_write. Alguem tem mais alguma ideia para contribuir, assim que vou avançando postarei algumas soluções neste post ;)
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.