Android Open Source - lifx-sdk-android L F X Socket T C P






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

//
//  LFXSocketTCP.java
//  LIFX//from  w  w w.  j av a 2s  .  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.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

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

public class LFXSocketTCP extends LFXSocketGeneric
{  
  private Thread asyncSocket;
  private Thread asyncSocketOutTask;
    
  private InputStream in;
  private OutputStream out;
  
  private Socket socket = null;
  
  public static final int RECEIVED_MESSAGE = 4;
  public static final int SOCKET_CONNECTION_FAILED = 5;
  
//  public LFXSocketTCP( byte[] ipAddress, int port)
//  {
//    super( ipAddress, port);
//  }
  
  public LFXSocketTCP()
  {
    super();
  }
  
  private class TCPReceiveTask implements Runnable
  {
    private Handler handler;
    
    public TCPReceiveTask( 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.obj = SOCKET_IS_CONNECTED;
          handler.sendMessage( msg);
      }
      
      public void publishConnecting()
      {
        Message msg = handler.obtainMessage();
        msg.obj = SOCKET_IS_CONNECTING;
          handler.sendMessage( msg);
      }
      
      public void publishDisconnected()
      {
        Message msg = handler.obtainMessage();
        msg.obj = SOCKET_IS_DISCONNECTED;
          handler.sendMessage( msg);
      }
    
    @Override
    public void run() 
    {
      socket = null;
              
            try 
            {
              boolean serverStarted = false;
              
              publishConnecting();
              
            try
            {
                InetAddress serverAddr = InetAddress.getByAddress( getIpAddress());
                  socket = new Socket( serverAddr, getPort());
                  socket.setReuseAddress( true);
                  
                  out = socket.getOutputStream();
                    in = socket.getInputStream();
                    
                    if( out == null || in == null)
                    {
                      socket.close();
                    }
                    else
                    {
                      serverStarted = true;
                    }
            }
            catch( Exception e)
            {
              System.out.println( "TCP Connection Failed.");
            }
 
              if( serverStarted)
              {
                setServerRunning( true);
                publishConnected();
              }
              else
              {
                setServerRunning( false);
              }
              
                byte[] buffer = new byte[200];
                
                while( getServerRunning()) 
                {
                    int length = in.read( buffer);
 
                    if( length > 0) 
                    {
                      byte[] messageData = new byte[length];
                      for( int i = 0; i < length; i++)
                      {
                        messageData[i] = buffer[i];
                      }
                      
                      byte[] ipAddress = socket.getInetAddress().getAddress();
                        SocketMessage message = new SocketMessage( messageData, ipAddress, length);
                        
                        SocketMessage[] messages = new SocketMessage[]{ message};
                        publishProgress( (SocketMessage[]) messages);
                    }
                    else if( length < 0)
                    {
                      System.out.println( "TCP Socket has been closed.");
                      close();
                    }
                }
            } 
            catch( Exception e) 
            {
              e.printStackTrace();
            } 
            
            close();
            
            publishDisconnected();
            
            System.out.println( "TCP Socket Monitor Ended Execution.");
    }
  }
  
  @Override
  public void connect( byte[] ipAddress, int port) 
  {
    bind( ipAddress, port);
    
    state = SocketState.CONNECTING;
    
    asyncSocket = new Thread( new TCPReceiveTask( handler));
    asyncSocket.start();
  }

  private void closeInputStream()
  {
    if( in != null)
    {
      try
      {
        in.close();
      }
      catch( Exception e) 
      {
        e.printStackTrace();
      }
    }
  }
  
  private void closeOutputStream()
  {
    if( out != null)
    {
      try
      {
        out.close();
      }
      catch( Exception e) 
      {
        e.printStackTrace();
      }
    }
  }
  
  private void closeSocket()
  {
    try
    {
      if( socket != null)
      {
        socket.close();
      }
    } 
    catch( IOException e)
    {
      e.printStackTrace();
    }
  }
  
  @Override
  public void close() 
  {
    super.close();
    closeInputStream();
    closeOutputStream();
    closeSocket();
  }
  
  public class SendMessageTask implements Runnable
  {
    private SocketMessage[] messages;
      
      public SendMessageTask( SocketMessage... messages)
      {
        this.messages = messages;
      }
    
    @Override
    public void run() 
    {
      for( SocketMessage message : messages)
          {
                try 
                {
                  byte[] messageData = message.getMessageData();
                  
                if( out != null) 
                {
                  DataOutputStream dos = new DataOutputStream( out);

                    if( messageData.length > 0) 
                    {
                        dos.write( messageData, 0, messageData.length);
                    }
          
                        dos.flush();   
                    }
                
                //System.out.println( "Message Sent Via TCP: " + MessageUnPacker.getMessageType( messageData).toString());
                } 
                catch( Exception e) 
                {
                    e.printStackTrace();
                    close();
                }
          }
    }
  }
  
  public void sendMessages( SocketMessage[] messages) 
  {
    asyncSocketOutTask = new Thread( new SendMessageTask( messages));
    asyncSocketOutTask.start();
    }

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




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