Click here to Skip to main content
15,896,207 members
Articles / Web Development / HTML

TraceTool 12.7: The Swiss-Army Knife of Trace

Rate me:
Please Sign up or sign in to vote.
4.97/5 (234 votes)
20 Nov 2016CPL19 min read 2M   39K   1K  
A C#, C++, Delphi, ActiveX , Javascript , NodeJs and Java trace framework and a trace viewer: Tail, OutputDebugString, event log, and with Log4J, Log4Net, and Microsoft Enterprise Instrumentation Framework (EIF) support. This also comes with full support for Pocket PC, Silverlight, and Android.
package demo2.trace;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

import android.tracetool.SendMode;
import android.tracetool.TTrace;
import android.tracetool.TraceDisplayFlags;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import demo2.trace.R; 

public class DemoMain extends ListActivity 
{
  
   DemoMain me = this ;
   
    // -------------------------------------------------------   
    public class IPString {
       String interfaceDisplayName ;
       String inetAddress ;
       String Loopback ;
    }
    
    // -------------------------------------------------------   
    
    // used to display ip adress into view
    public class IpAdapter extends ArrayAdapter<IPString> {
       
       int resource; 
       //String response;
       //Context context;
       
       //Initialize adapter
       public IpAdapter(Context context, int resource, List<IPString> items) {
           super(context, resource, items);
           this.resource=resource;

       }

       @Override
       public View getView(int position, View convertView, ViewGroup parent)
       {
           LinearLayout ipView;
           //Get the current alert object
           IPString ip = getItem(position);

           //Inflate the view
           if(convertView==null)
           {
               ipView = new LinearLayout(getContext());
               String inflater = Context.LAYOUT_INFLATER_SERVICE;
               LayoutInflater vi;
               vi = (LayoutInflater)getContext().getSystemService(inflater);
               vi.inflate(resource, ipView, true);
           }
           else
           {
               ipView = (LinearLayout) convertView;
           }
           //Get the text boxes from the listitem.xml file
           TextView interfaceDisplayName = (TextView)ipView.findViewById(R.id.interfaceDisplayName);
           TextView inetAddress          = (TextView)ipView.findViewById(R.id.inetAddress);


           //Assign the appropriate data from our alert object above
           interfaceDisplayName.setText(ip.interfaceDisplayName + " " + ip.Loopback);
           inetAddress.setText(ip.inetAddress);

           return ipView;
       }

    }

    // -------------------------------------------------------   
   
    private Button mButGetIp;
    private Button mButton_tracetool_test;
    private Button mButton_ServiceMode;
    private Button mButton_ClientMode;
    
    private ListView mListView ;
    private EditText mTargetIp ;
    private TextView mStatus ;
    private TextView mStatus2 ;
   
    private Handler mHandler = new Handler();
  
    public int counter = 0 ;
    public ArrayList<String> IpList ;
    public ArrayList<IPString> InetAddressList ;
    IpAdapter IpArrayAdapter;
   
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        try
        {
           setContentView(R.layout.main);   // 
        } catch (Exception ex) {
           Log.e("ip", ex.toString());
        }   

        mButGetIp = (Button) findViewById(R.id.butGetIp);
        mListView = (ListView) findViewById(android.R.id.list);
        mButton_tracetool_test = (Button) findViewById(R.id.Button_tracetool_test);
        mTargetIp = (EditText) findViewById(R.id.TargetIp); 
        mStatus = (TextView) findViewById(R.id.status); 
        mStatus2 = (TextView) findViewById(R.id.status2); 
        mButton_ServiceMode= (Button) findViewById(R.id.Button_ServiceMode); 
        mButton_ClientMode= (Button) findViewById(R.id.Button_ClientMode); 
        
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
        
        mButGetIp.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            	ButGetIp_click(v) ;
            }
        });

        mButton_ClientMode.setOnClickListener(new View.OnClickListener() {
           public void onClick(View v) {              
              TTrace.options.socketHost = mTargetIp.getText().toString() ;
              TTrace.options.sendMode = SendMode.Socket ;
           }
        });
        
        mButton_ServiceMode.setOnClickListener(new View.OnClickListener() {
           public void onClick(View v) {
              // TODO : Create a function that pass a context and swith to Service mode
              TTrace.context = v.getContext() ;   // return : instanceof class main (extends ListActivity)
              TTrace.options.sendMode = SendMode.Service ;
           }
        });

        //mButton_ShowStatus.setOnClickListener(new View.OnClickListener() {
        //   public void onClick(View v) {
        //      mStatus.setText(TTrace.socketStatus) ;
        //   }
        //});

        mButton_tracetool_test.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
               
               ButGetIp_click(v) ;   // ensure we have the InetAddressList table
               counter++ ;
               TTrace.options.socketHost = mTargetIp.getText().toString() ;
               TTrace.debug().send("counter : " + Integer.toString(counter));
          
               int flags = TraceDisplayFlags.showModifiers + 
                           TraceDisplayFlags.showClassInfo +
                           TraceDisplayFlags.showFields +
                           TraceDisplayFlags.showInheritedMembers +
                           TraceDisplayFlags.showMethods +
                           TraceDisplayFlags.showNonPublic;

               
               //Context appcontext = getApplicationContext() ;
               TTrace.debug().send("Traces from demo program") ;
               TTrace.debug().sendObject("this", this,flags) ;
               TTrace.warning().send("More traces ...") ;
               TTrace.debug().sendObject("me object : Full info (take a long time to extract info)", me,flags) ;
               TTrace.debug().sendObject("me object : Only public field (faster)", me) ;
               TTrace.debug().sendValue ("me value  : public fields and sub elements details", me) ;
               TTrace.debug().sendTable("table", InetAddressList) ;               
               byte [] dump = new byte[256] ;
               for (int c = 0 ; c <= 255 ; c++)
                  dump[c] = (byte) c ;               
               TTrace.debug().sendDump("dump", "all chars", dump, 256) ;
            }
        });
        
        mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE) ;
        
        // start timer in 3 sec.
        mHandler.postDelayed(mUpdateTimeTask, 3000);
     
    }
    
    protected void onDestroy()
    {
       super.onDestroy();
       mHandler.removeCallbacks(mUpdateTimeTask);
       TTrace.closeSocket() ;
    }

    // TIMER
    private int lastindex = 0 ;
    private static String timerstring = "|/-\\" ;
    private Runnable mUpdateTimeTask = new Runnable() {
       public void run() {
          mStatus.setText(TTrace.socketStatus +  " " + timerstring.charAt(lastindex)  ) ;
          mStatus2.setText(TTrace.getServiceStatus()) ;
          lastindex++ ;
          if (lastindex > 3)
             lastindex = 0 ;
          
          mHandler.postAtTime(this, SystemClock.uptimeMillis () + 2000);
       }
    };

    // get all ip
    public void ButGetIp_click(View v)
    {
       //String result = "" ;
       IpList = new ArrayList<String>() ;
       InetAddressList = new ArrayList<IPString>() ;
       try {
          for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
             NetworkInterface intf = en.nextElement();
             for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                InetAddress inetAddress = enumIpAddr.nextElement();
                
                IPString iPString = new IPString() ;
                InetAddressList.add(iPString) ;
                
                iPString.interfaceDisplayName = intf.getDisplayName() ;
                iPString.inetAddress = inetAddress.getHostAddress().toString() ;

                String adr = intf.getDisplayName() + ":" + inetAddress.getHostAddress().toString() ;  // +"\n"
                if (!inetAddress.isLoopbackAddress()) {
                   IpList.add(adr + "(Loopback)") ;	
                   iPString.Loopback =  "(Loopback)";
                } else {
                   IpList.add(adr) ;	
                   iPString.Loopback = "" ;
                }
             }
	        }
	    } catch (SocketException ex) {
	    	IpList.add(ex.toString()) ;
	    	//mTextView01.setText(ex.toString());
	    	Log.e("ip", ex.toString());
	    }   
	    
       IpArrayAdapter = new IpAdapter(DemoMain.this, R.layout.ip_row2,InetAddressList);
       setListAdapter(IpArrayAdapter);    // mListView.setAdapter
    
  
       //ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.ip_row  , R.id.ip_text ,IpList);
       //ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,IpList);
       //ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_single_choice,IpList);

       //setListAdapter(adapter);    // mListView.setAdapter

    }
    
    
    @Override  
    protected void onListItemClick(ListView l, View v, int position, long id)
    { 
         super.onListItemClick(l, v, position, id);
         mListView.setSelection (position) ;
         ListViewOnItemSelected(l,v,position,id) ;
    }
    
    public void ListViewOnItemSelected (AdapterView<?> parent, View view, int position, long i)
    {
       //Toast.makeText(this, "position: "+position, Toast.LENGTH_SHORT).show();
       mTargetIp.setText(InetAddressList.get(position).inetAddress );         
    }

}


By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Common Public License Version 1.0 (CPL)


Written By
Architect
Belgium Belgium
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions