Android Open Source - lifx-sdk-android L F X Socket Generic






From Project

Back to project page lifx-sdk-android.

License

The source code is released under:

MIT License

If you think the Android project lifx-sdk-android 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

//
//  LFXSocketGeneric.java
//  LIFX/*w w w . j  av a  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.util.ArrayList;

import lifx.java.android.entities.internal.LFXMessage;
import lifx.java.android.util.LFXByteUtils;

import android.content.Context;
import android.net.DhcpInfo;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;

public abstract class LFXSocketGeneric 
{
  protected static final int SOCKET_RECEIVED_MESSAGE = 4;
  protected static final int SOCKET_IS_CONNECTING = 5;
  protected static final int SOCKET_IS_CONNECTED = 6;
  protected static final int SOCKET_IS_DISCONNECTED = 7;
  
  public enum SocketState
  {
    CONNECTING,
    CONNECTED,
    DISCONNECTED
  }
  
  public enum ConnectionType
  {
    UDP,
    TCP
  }
  
  public abstract void connect( byte[] ipAddress, int port);
  public abstract void sendMessages( SocketMessage[] messages);
  public abstract ConnectionType getConnectionType();
  
  public static class SocketMessage
  {
    private byte[] message;
    private byte[] ipAddress;
    private int port;
    
    public SocketMessage( byte[] message)
    {
      this( message, null, 0);
    }
    
    public SocketMessage( byte[] message, byte[] ipAddress, int port)
    {
      int size = LFXMessage.getSizeFromMessageData( message);
      byte[] bytes = new byte[size];
      LFXByteUtils.copyBytesIntoByteArrayUpToLength( bytes, message, size);
      this.message = bytes;
      this.ipAddress = ipAddress;
      this.port = port;
    }

    public byte[] getMessageData() 
    {
      return message;
    }

    public byte[] getIpAddress() 
    {
      return ipAddress;
    }

    public int getPort() 
    {
      return port;
    }
    
    public SocketMessage cloneWithIpAddressAndPort( byte[] ipAddress, int port)
    {
      byte[] cloneMessage = new byte[message.length];
      for( int i = 0; i <  message.length; i++)
      {
        cloneMessage[i] = message[i];
      }
      
      byte[] cloneIpAddress = new byte[ipAddress.length];
      for( int i = 0; i <  ipAddress.length; i++)
      {
        cloneIpAddress[i] = ipAddress[i];
      }
      
      SocketMessage clone = new SocketMessage( cloneMessage, cloneIpAddress, port);
      
      return clone;
    }
  }
  
  public interface SocketStateListener
  {
    public void notifySocketStateChanged( LFXSocketGeneric socket, SocketState state);
  }
  
  public interface SocketMessageListener
  {
    public void notifyMessageReceived( SocketMessage message);
  }  
  
  private ArrayList<SocketStateListener> stateListeners;
  private ArrayList<SocketMessageListener> listeners;
    private boolean serverRunning = true;
  private byte[] ipAddress;
  private int port;
  protected Handler handler;
  protected SocketState state = SocketState.DISCONNECTED;
  protected Object closeLock = new Object();
  
  public LFXSocketGeneric() 
  {
    stateListeners = new ArrayList<SocketStateListener>();
    listeners = new ArrayList<LFXSocketGeneric.SocketMessageListener>();
    setHandler();
  }
  
//  public LFXSocketGeneric( byte[] ipAddress, int port) 
//  {
//    this();
//    this.ipAddress = ipAddress;
//    this.port = port;
//  }
  
  protected void bind( byte[] ipAddress, int port) 
  {
    this.ipAddress = ipAddress;
    this.port = port;
  }
  
  public Handler getMessageHandler()
  {
    return handler;
  }
  
  public SocketState getSocketState()
  {
    return state;
  }
  
  protected byte[] getIpAddress()
  {
    return ipAddress;
  }
  
  private void setHandler()
    {
      handler = new Handler( Looper.getMainLooper())
      {
        @Override
        public void handleMessage( Message message)
        {
          int type = message.what;
          
          if(  type == SOCKET_RECEIVED_MESSAGE)
            {
                notifyAllListenersMessageReceived( (SocketMessage) message.obj);
            }
            else if( type == SOCKET_IS_CONNECTING)
            {
              state = SocketState.CONNECTING;
              notifyAllListenersSocketStateChanged( SocketState.CONNECTING);
            }
            else if( type == SOCKET_IS_CONNECTED)
            {
              state = SocketState.CONNECTED;
              notifyAllListenersSocketStateChanged( SocketState.CONNECTED);
            }
            else if( type == SOCKET_IS_DISCONNECTED)
            {
              state = SocketState.DISCONNECTED;
              notifyAllListenersSocketStateChanged( SocketState.DISCONNECTED);
            }
        }
      };
    }
  
  protected int getPort()
  {
    return port;
  }
  
  public final void addStateListener( SocketStateListener listener)
  {
    if( !stateListeners.contains( listener))
    {
      stateListeners.add( listener);
    }
  }
  
  public final void removeConnectListener( SocketStateListener listener)
  {
    if( stateListeners.contains( listener))
    {
      stateListeners.remove( listener);
    }
  }
  
  protected void notifyAllListenersSocketStateChanged( SocketState state)
  {
    for( SocketStateListener listener : stateListeners)
    {
      listener.notifySocketStateChanged( this, state);
    }
  }
  
  public final void addMessageListener( SocketMessageListener listener)
  {
    if( !listeners.contains( listener))
    {
      listeners.add( listener);
    }
  }
  
  public final void removeMessageListener( SocketMessageListener listener)
  {
    if( listeners.contains( listener))
    {
      listeners.remove( listener);
    }
  }
  
  protected void notifyAllListenersMessageReceived( SocketMessage message)
  {
    for( SocketMessageListener listener : listeners)
    {
      listener.notifyMessageReceived( message);
    }
  }
  
  public final void sendMessage( SocketMessage message)
    {
      SocketMessage[] messages = new SocketMessage[]{ message};
      sendMessages( messages);
    }
  
  public void close() 
  {
    setServerRunning( false);
  }

  protected void setServerRunning( boolean serverRunning)
  {
    synchronized( closeLock)
    {
      this.serverRunning = serverRunning;
    }
  }
  
  protected boolean getServerRunning()
  {
    boolean value = false;
    
    synchronized( closeLock)
    {
      value = serverRunning;
    }
    
    return value;
  }

  public final static byte[] getBroadcastAddress( Context context)
  {
      WifiManager wifi = (WifiManager) context.getSystemService( Context.WIFI_SERVICE);
      DhcpInfo dhcp = wifi.getDhcpInfo();
      // handle null somehow

      int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
      byte[] quads = new byte[4]; 
      
      for( int k = 0; k < 4; k++)
      {
        quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);
      }
      
      return quads;
  }
}




Java Source Code List

com.example.lifx_sdk_samples.LFXSDKLightEditLabelActivity.java
com.example.lifx_sdk_samples.LFXSDKLightListAdapter.java
com.example.lifx_sdk_samples.LFXSDKLightPowerActivity.java
com.example.lifx_sdk_samples.LFXSDKLightRandomColorActivity.java
com.example.lifx_sdk_samples.LFXSDKSamplesActivity.java
com.example.lifx_sdk_samples.LFXSDKTaggedLightCollectionListAdapter.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