Android Open Source - lifx-wear-test L F X Socket U D P






From Project

Back to project page lifx-wear-test.

License

The source code is released under:

Apache License

If you think the Android project lifx-wear-test listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

//
//  LFXSocketUDP.java
//  LIFX//from   w ww.  j ava 2  s .  c  o  m
//
//  Created by Jarrod Boyes on 24/03/14.
//  Copyright (c) 2014 LIFX Labs. All rights reserved.
//

package lifx.java.android.network_context.internal.transport_manager.gateway_connection;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;

import android.os.Handler;
import android.os.Message;

public class LFXSocketUDP extends LFXSocketGeneric
{  
  // Variables for receiving
    private Thread asyncReceiveThread;
    
    // Variables for sending
    private Thread asyncSendThread;
    public byte[] sendBuffer;
    
    private boolean isBroadcast = false;
    private byte[] broadcastIpAddress;
    private int broadcastPort;
    
    private DatagramSocket updSocket = null;
    
    public LFXSocketUDP()
    {
      super();
    }
    
    public class MessageSendTask implements Runnable
    {
      private SocketMessage[] messages;
      
      public MessageSendTask( SocketMessage[] messages)
      {
        this.messages = messages;
      }
      
    @Override
    public void run() 
    {
          for( SocketMessage message : messages)
          {
                DatagramSocket dataGramSocket = null;

                try 
                {
                  byte[] messageData = message.getMessageData();
                  
                    dataGramSocket = new DatagramSocket();
                    dataGramSocket.setReuseAddress( true);
                    
                    DatagramPacket udpPacket;      
                    
                    InetAddress ipAddress;
                    int port;
                    
                    ipAddress = InetAddress.getByAddress( message.getIpAddress());
                    port = message.getPort();
                   
                    udpPacket = new DatagramPacket( messageData, messageData.length, ipAddress, port);
                  
                  if( !dataGramSocket.isClosed())
                  {
                    dataGramSocket.send( udpPacket);
                  }
                } 
                catch( Exception e) 
                {
                    e.printStackTrace();
                    close();
                }
          }
    }
    }
    
    public void sendMessages( SocketMessage[] messages)
    {  
      asyncSendThread = new Thread( new MessageSendTask( messages));
      asyncSendThread.start();
    }
    
    private class UDPReceiveTask implements Runnable
    {
      private Handler handler;
      
      public UDPReceiveTask( Handler handler)
      {
        super();
        this.handler = handler;
      }
      
      public void publishProgress( SocketMessage[] messages)
      {
        Message msg = handler.obtainMessage();
          msg.what = SOCKET_RECEIVED_MESSAGE;
          msg.obj = messages[0];
          handler.sendMessage( msg);
      }
      
      public void publishConnected()
      {
        Message msg = handler.obtainMessage();
        msg.what = SOCKET_IS_CONNECTED;
          handler.sendMessage( msg);
      }
      
      public void publishConnecting()
      {
        Message msg = handler.obtainMessage();
        msg.what = SOCKET_IS_CONNECTING;
          handler.sendMessage( msg);
      }
      
      public void publishDisconnected()
      {
        Message msg = handler.obtainMessage();
        msg.what = SOCKET_IS_DISCONNECTED;
          handler.sendMessage( msg);
      }
      
    @Override
    public void run() 
    {
       byte[] messageData = new byte[1024];
             DatagramPacket udpPacket = new DatagramPacket( messageData, messageData.length);

             try 
             {
               boolean serverStarted = false;
               
               publishConnecting();
               
             InetAddress ipAddress = null;
                 int port = 0;
             
             try
             {
                 if( updSocket == null || updSocket.isClosed())
                 {
                   updSocket = new DatagramSocket( null);
                   
                   if( isBroadcast)
                      {
                        ipAddress = InetAddress.getByAddress( broadcastIpAddress);
                        port = broadcastPort;
                        updSocket.setBroadcast( true);
                      }
                      else
                      {
                        ipAddress = InetAddress.getByAddress( getIpAddress());
                        port = getPort();
                      }
                   
                   updSocket.setReuseAddress( true);
                   updSocket.bind( new InetSocketAddress( port));
                   
                   serverStarted = true;
                 }
             }
             catch( Exception e)
             {
               e.printStackTrace();
               System.out.println( "Error Starting server. IP: " + ipAddress.toString() + ", Port: " + port);
               updSocket = null;
             }
                 
             System.out.println( "UDP SOCKET MONITOR IS ONLINE - ip: " + ipAddress.toString() + ", port: " + port);
             
               if( serverStarted)
               {
                 setServerRunning( true);
                 publishConnected();
               }
               else 
               {
                 setServerRunning( false);
               }
               
                 while( getServerRunning())
                 {
                     updSocket.receive( udpPacket);
                     
                     byte[] messageAddress = udpPacket.getAddress().getAddress();
                     int messagePort = udpPacket.getPort();
                     SocketMessage message = new SocketMessage( messageData, messageAddress, messagePort);
                     
                     SocketMessage[] messages = new SocketMessage[]{ message};
                     publishProgress( (SocketMessage[]) messages);
                 }
             } 
             catch( Exception e) 
             {
               System.out.println( "UDP Socket has been closed.");
             } 
 
             close();
             
             publishDisconnected();
             
             System.out.println( "UDP Socket Monitor Ended Execution.");
    }
      
    }
    
    @Override
    public void close()
    {
      super.close();
       
      if( updSocket != null)
      {
        updSocket.close();
      }
    }
    
    public void connect( byte[] ipAddress, int port) 
    {
      bind( ipAddress, port);
      
      if( asyncReceiveThread == null || !asyncReceiveThread.isAlive())
      {
        state = SocketState.CONNECTING;
        
          asyncReceiveThread = new Thread( new UDPReceiveTask( handler));
          asyncReceiveThread.start();
      }
    }

  @Override
  public ConnectionType getConnectionType() 
  {
    return ConnectionType.UDP;
  }
}




Java Source Code List

de.dp.lifxtest.app.LightsFragment.java
de.dp.lifxtest.app.MasterActivity.java
lifx.java.android.client.LFXClient.java
lifx.java.android.constant.LFXSDKConstants.java
lifx.java.android.entities.LFXHSBKColor.java
lifx.java.android.entities.LFXLightTarget.java
lifx.java.android.entities.LFXTypes.java
lifx.java.android.entities.internal.LFXBinaryPath.java
lifx.java.android.entities.internal.LFXBinaryTargetID.java
lifx.java.android.entities.internal.LFXBinaryTypes.java
lifx.java.android.entities.internal.LFXDeviceMapping.java
lifx.java.android.entities.internal.LFXGatewayDescriptor.java
lifx.java.android.entities.internal.LFXMessageObservationDescriptor.java
lifx.java.android.entities.internal.LFXMessage.java
lifx.java.android.entities.internal.LFXSiteID.java
lifx.java.android.entities.internal.LFXTagMapping.java
lifx.java.android.entities.internal.LFXTarget.java
lifx.java.android.entities.internal.structle.LxProtocolDevice.java
lifx.java.android.entities.internal.structle.LxProtocolLight.java
lifx.java.android.entities.internal.structle.LxProtocolSensor.java
lifx.java.android.entities.internal.structle.LxProtocolWan.java
lifx.java.android.entities.internal.structle.LxProtocolWifi.java
lifx.java.android.entities.internal.structle.LxProtocol.java
lifx.java.android.entities.internal.structle.Lx.java
lifx.java.android.entities.internal.structle.StructleTypes.java
lifx.java.android.internal.LFXWiFiObserver.java
lifx.java.android.light.LFXLightCollection.java
lifx.java.android.light.LFXLight.java
lifx.java.android.light.LFXTaggedLightCollection.java
lifx.java.android.light.internal.LFXAllLightsCollection.java
lifx.java.android.network_context.LFXNetworkContext.java
lifx.java.android.network_context.internal.routing_table.LFXRoutingTable.java
lifx.java.android.network_context.internal.transport_manager.LFXTransportManager.java
lifx.java.android.network_context.internal.transport_manager.gateway_connection.LFXGatewayConnection.java
lifx.java.android.network_context.internal.transport_manager.gateway_connection.LFXSocketGeneric.java
lifx.java.android.network_context.internal.transport_manager.gateway_connection.LFXSocketTCP.java
lifx.java.android.network_context.internal.transport_manager.gateway_connection.LFXSocketUDP.java
lifx.java.android.network_context.internal.transport_manager.gateway_connection.LFXTCPGatewayConnection.java
lifx.java.android.network_context.internal.transport_manager.gateway_connection.LFXUDPGatewayConnection.java
lifx.java.android.network_context.internal.transport_manager.lan.LFXLANTransportManager.java
lifx.java.android.network_context.internal.transport_manager.lan.gateway_discovery.LFXGatewayDiscoveryController.java
lifx.java.android.network_context.internal.transport_manager.lan.gateway_discovery.LFXGatewayDiscoveryTableEntry.java
lifx.java.android.util.LFXByteUtils.java
lifx.java.android.util.LFXLog.java
lifx.java.android.util.LFXNetworkUtils.java
lifx.java.android.util.LFXTimerUtils.java