Android Remote Control for net-TV3

This app uses wireless network to connect your PC and then sends commands to control your player software. Now, it only supports UPMOST net-TV3 (network TV-BOX).

Development tool:

  • Server: Embarcadero C++ Builder XE3
  • Client: Eclipse with Android SDK
  • Testing Platform: HTC Desire HD (Android 2.3.4)

 

Scenario:Scenario

connection

pad

mute remote

Server side:

   remote_server

Client side partial source code:

package com.dhd.remotecontrol;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;
import java.util.Vector;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity 
{
	
	private Button Btn_Connection;
	private Spinner Spinner_ProcessList; 
	
	private String[] lists= {"net-TV 2012", "AVerTV 3D"};
	
	public EditText textView_IP;
	public EditText textView_Port;
	public Socket socket;
	public InetAddress serverAddr;
	
	public static String hostip;
	public String selectProcess;
	
	
	private Button Btn_1, Btn_2, Btn_3, Btn_4, Btn_5, Btn_6, Btn_7, Btn_8, Btn_9, Btn_0, Btn_100,
	Btn_last;
	
	private ImageButton  Btn_vol_up, Btn_vol_down, Btn_ch_up, Btn_ch_down, Btn_power, Btn_mute;
	private TextView textView_Channel;
	
	private TabHost tabHost;
	private TabSpec tabSpec;
	
	int currentChannel;
	int prevChannel;
    
    private String sendMessage;
    //private String connectInfo;
    private String  info[];
    private boolean connected; 
    private boolean hundredClicked; 
    private boolean muteClicked;
    
    private PrintWriter out;     
    BufferedReader in;
    Vector<String> channelVector = new Vector<String>();
	
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		setViewComponent();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) 
	{
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	
	
	private void setViewComponent()
	{
		// TabHost Initializer
		tabHost = (TabHost)findViewById(R.id.tabHost);
		tabHost.setup();
		
		tabSpec = tabHost.newTabSpec("tag1");
		tabSpec.setContent(R.id.tab_connection);
		tabSpec.setIndicator("Connection", getResources().getDrawable(R.drawable.ic_launcher_wireless2));
		tabHost.addTab(tabSpec);

		tabSpec = tabHost.newTabSpec("tag2");
		tabSpec.setContent(R.id.tab_pad);
		tabSpec.setIndicator("Pad");
		tabHost.addTab(tabSpec);
		
		tabSpec = tabHost.newTabSpec("tag3");
		tabSpec.setContent(R.id.tab_vol_ch);
		tabSpec.setIndicator("Remote");
		tabHost.addTab(tabSpec);
		
		
		// Button and ImageButton
		Btn_Connection = (Button) this.findViewById(R.id.Btn_connect);
		Btn_1 = (Button)findViewById(R.id.Btn_1);
		Btn_2 = (Button)findViewById(R.id.Btn_2);
		Btn_3 = (Button)findViewById(R.id.Btn_3);
		Btn_4 = (Button)findViewById(R.id.Btn_4);
		Btn_5 = (Button)findViewById(R.id.Btn_5);
		Btn_6 = (Button)findViewById(R.id.Btn_6);
		Btn_7 = (Button)findViewById(R.id.Btn_7);
		Btn_8 = (Button)findViewById(R.id.Btn_8);
		Btn_9 = (Button)findViewById(R.id.Btn_9);
		Btn_0 = (Button)findViewById(R.id.Btn_0);
		Btn_100 = (Button)findViewById(R.id.Btn_100);
		Btn_last = (Button)findViewById(R.id.Btn_Last);
		
		Btn_power = (ImageButton)findViewById(R.id.imageBtn_Power);
		Btn_mute = (ImageButton)findViewById(R.id.imageBtn_Mute);
		Btn_vol_up = (ImageButton)findViewById(R.id.imageBtn_Vol_Up);
		Btn_vol_down = (ImageButton)findViewById(R.id.imageBtn_Vol_Down);
		Btn_ch_up = (ImageButton)findViewById(R.id.imageBtn_Ch_Up);
		Btn_ch_down = (ImageButton)findViewById(R.id.imageBtn_Ch_Down);
		
		
		//TextView
		textView_IP = (EditText)findViewById(R.id.editText_IP);
		textView_Port = (EditText)findViewById(R.id.editText_Port);
		textView_Channel = (TextView)findViewById(R.id.textView_CurrentChannel); 
		
		
		// Initialize Spinner Context
		Spinner_ProcessList = (Spinner) this.findViewById(R.id.spinner_ProcessList);
		
		ArrayAdapter<String> item = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item,lists); 
		Spinner_ProcessList.setAdapter(item); 
		Spinner_ProcessList.setOnItemSelectedListener(new SpinnerSelectedListener());
		selectProcess = lists[0];	//Default
				
		try
		{
			hostip = getLocalIpAddress();
			textView_IP.setText(hostip.subSequence(0, hostip.lastIndexOf(".")+1));
			textView_Port.setText("7788");
		}
		catch(Exception e1)
		{
			String connectInfo = "Connection Fails. Please set your remote ip/port again.";
			Toast.makeText(this, connectInfo, Toast.LENGTH_LONG).show();
		}	
		
		
		//Variable Initialization
		sendMessage = "";
		currentChannel = -1;
		prevChannel = -1;
		connected = false;
		hundredClicked = false;
		muteClicked = false;
		info = new String[3];
		info[2] = selectProcess;
		
		// Button Listener
		Btn_Connection.setOnClickListener(Btn_ConnectionOnClick);
		Btn_1.setOnClickListener(Btn_1OnClick);
		Btn_2.setOnClickListener(Btn_2OnClick);
		Btn_3.setOnClickListener(Btn_3OnClick);
		Btn_4.setOnClickListener(Btn_4OnClick);
		Btn_5.setOnClickListener(Btn_5OnClick);
		Btn_6.setOnClickListener(Btn_6OnClick);
		Btn_7.setOnClickListener(Btn_7OnClick);
		Btn_8.setOnClickListener(Btn_8OnClick);
		Btn_9.setOnClickListener(Btn_9OnClick);
		Btn_0.setOnClickListener(Btn_0OnClick);
		Btn_100.setOnClickListener(Btn_100OnClick);
		Btn_last.setOnClickListener(Btn_lastOnClick);
		
		Btn_power.setOnClickListener(Btn_powerOnClick);
		Btn_mute.setOnClickListener(Btn_muteOnClick);
		Btn_vol_up.setOnClickListener(Btn_vol_upOnClick);
		Btn_vol_down.setOnClickListener(Btn_vol_downOnClick);
		Btn_ch_up.setOnClickListener(Btn_ch_upOnClick);
		Btn_ch_down.setOnClickListener(Btn_ch_downOnClick);
	}
	private void setChannel(String channel)
	{
		sendMessage += channel; 
    	textView_Channel.setText("Channel:" + sendMessage);
		try 
		{
			if(sendMessage.length() == 2 && !sendMessage.substring(0, 1).equals("+"))
			{
				channelVector.add(sendMessage);
				currentChannel = Integer.parseInt(sendMessage);
				out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
				out.println(info[2]+","+sendMessage);
				out.flush();
				sendMessage = "";
			}
			else if(sendMessage.length() == 3 && sendMessage.substring(0, 1).equals("+"))
			{
				String hundChannel = "";
				hundChannel = "1" + sendMessage.substring(1,3);
				channelVector.add(sendMessage);
				currentChannel = Integer.parseInt(hundChannel);
				out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
				out.println(info[2]+","+sendMessage);
				out.flush();
				sendMessage = "";
				hundredClicked = false;
			}
		} 
		catch (IOException e) 
		{
			
			e.printStackTrace();
		}  
	}
	private Button.OnClickListener Btn_1OnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			if(connected)
        	{
				setChannel("1");    
        	}
		}
	};
	
	private Button.OnClickListener Btn_2OnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			if(connected)
        	{
				setChannel("2");     
        	}
		}
	};
	
	private Button.OnClickListener Btn_3OnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			if(connected)
        	{
				setChannel("3");        
        	}
		}
	};
	
	private Button.OnClickListener Btn_4OnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			if(connected)
        	{
				setChannel("4");      
        	}
		}
	};
	
	private Button.OnClickListener Btn_5OnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			if(connected)
        	{
				setChannel("5");      
        	}
		}
	};
	
	private Button.OnClickListener Btn_6OnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			if(connected)
        	{
				setChannel("6");      
        	}
		}
	};
	
	private Button.OnClickListener Btn_7OnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			if(connected)
        	{
				setChannel("7");      
        	}
		}
	};
	
	private Button.OnClickListener Btn_8OnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			if(connected)
        	{
				setChannel("8");      
        	}
		}
	};
	
	private Button.OnClickListener Btn_9OnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			if(connected)
        	{
				setChannel("9");      
        	}
		}
	};
	
	private Button.OnClickListener Btn_0OnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			if(connected)
        	{
				setChannel("0");     
        	}
		}
	};
	
	private Button.OnClickListener Btn_100OnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			if(connected)
        	{
        		if(!hundredClicked && sendMessage.length() == 0)
        		{
	            	sendMessage += "+"; 
	            	textView_Channel.setText("Channel:" + sendMessage);
	            	hundredClicked = true;
        		}
        	}
		}
	};
	
	private Button.OnClickListener Btn_lastOnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			try 
			{	
				if(connected)
				{
					if(channelVector.size() >= 2)
					{
						sendMessage = channelVector.get(channelVector.size()-2).toString(); 
						textView_Channel.setText("Channel:" + sendMessage);  
						if(!sendMessage.substring(0, 1).equals("+"))
						{
							channelVector.add(sendMessage);
							currentChannel = Integer.parseInt(sendMessage);
							out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
							out.println(info[2]+","+sendMessage);
							out.flush();
							sendMessage = "";
						}
						else if(sendMessage.length() == 3 && sendMessage.substring(0, 1).equals("+"))
						{
							String hundChannel = "";
							hundChannel = "1" + sendMessage.substring(1,3);
							channelVector.add(sendMessage);
							currentChannel = Integer.parseInt(hundChannel);
							out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
							out.println(info[2]+","+sendMessage);
							out.flush();
							sendMessage = "";
							hundredClicked = false;
						}
						
					}
					else
					{
						out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
						out.println(info[2]+",L");
						out.flush();
						sendMessage = "";
					}
				}
			} 
			catch (IOException e) 
			{
				e.printStackTrace();
			}    
		}
	};
	
	private void sendCommand(String cmd)
	{
		if(connected)
		{
			try 
			{		
				out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
				out.println(info[2] + "," + cmd);
				out.flush();		
			} 
			catch (IOException e) 
			{
				e.printStackTrace();
			}
		}
	}
	
	private Button.OnClickListener Btn_powerOnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			sendCommand("CMD.POWERONOFF");  	
		}
	};
	
	private Button.OnClickListener Btn_muteOnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			if(connected)
        	{
		
				if(muteClicked)
				{
					Btn_mute.setImageResource(R.drawable.ic_launcher_mute); //un-mute
					muteClicked = !muteClicked;
				}
				else
				{
					Btn_mute.setImageResource(R.drawable.ic_launcher_mute2);
					muteClicked = !muteClicked;
				}
				sendCommand("CMD.MUTE");  	  
        	}
		}
	};
	
	private Button.OnClickListener Btn_vol_upOnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			sendCommand("CMD.VOLUP"); 
		}
	};
	
	private Button.OnClickListener Btn_vol_downOnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			sendCommand("CMD.VOLDOWN"); 
		}
	};
	
	private Button.OnClickListener Btn_ch_upOnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			sendCommand("CMD.CHNEXT"); 
		}
	};
	
	private Button.OnClickListener Btn_ch_downOnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			sendCommand("CMD.CHBACK"); 
		}
	};
	
	private Button.OnClickListener Btn_ConnectionOnClick = new Button.OnClickListener()
	{
		public void onClick(View v)
		{
			if(Btn_Connection.getText().toString().equals("Connect"))
			{	
				try 
				{
					serverAddr = InetAddress.getByName(textView_IP.getText().toString());
					try 
					{
						socket = new Socket(serverAddr, Integer.parseInt(textView_Port.getText().toString()));
						connected = true;
						Btn_Connection.setText("Disconnect");

						info[0] = textView_IP.getText().toString();
						info[1] = textView_Port.getText().toString();
						View mView = tabHost.getTabWidget().getChildAt(0);
						ImageView imageView = (ImageView)mView.findViewById(android.R.id.icon);
						imageView.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher_connected)); 
				
						tabHost.setCurrentTab(1);
					} 
					catch (NumberFormatException e) 
					{		
						e.printStackTrace();					
						Toast.makeText(MainActivity.this, "Connection Failed!", Toast.LENGTH_LONG).show();				
						Disconnection();
					} 
					catch (IOException e) 
					{
						e.printStackTrace();
						Toast.makeText(MainActivity.this, "Connection Failed!", Toast.LENGTH_LONG).show();
						Disconnection();
					}
				} 
				catch (UnknownHostException e) 
				{	
					e.printStackTrace();	
					Toast.makeText(MainActivity.this, "Connection Failed!", Toast.LENGTH_LONG).show();
					Disconnection();
				}
			}
			else if(Btn_Connection.getText().toString().equals("Disconnect"))
			{
				Btn_Connection.setText("Connect");
				try 
				{
					socket.close();
					Disconnection();
				} 
				catch (IOException e) 
				{
					e.printStackTrace();
					connected = false;
				}
			} 
		}
	};
	
	private void Disconnection()
	{
		connected = false;	
		View mView = tabHost.getTabWidget().getChildAt(0);
		ImageView imageView = (ImageView)mView.findViewById(android.R.id.icon);
		imageView.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher_wireless2)); 
	}
	
	class SpinnerSelectedListener implements OnItemSelectedListener
	{
		public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,  long arg3) 
		{  
			selectProcess = lists[arg2];
			info[2] = selectProcess; 
		}  
		 
		public void onNothingSelected(AdapterView<?> arg0) 
		{
			selectProcess = lists[0]; 
			info[2] = selectProcess;
		}

	}
	
	public String getLocalIpAddress() 
	{     
        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();     
                    if (!inetAddress.isLoopbackAddress()) 
                    {     
                        return inetAddress.getHostAddress().toString();     
                    }     
                }     
            }     
        } 
        catch (SocketException ex) 
        {     
            Log.e("WifiPreference IpAddress", ex.toString());     
        }     
        return null;     
    }  
	
}

 

 

Server side source code:

//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdio.h>
#include <winsock2.h>
#include <vector>
#include <algorithm>

#pragma hdrstop

#include "main.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm_RemoteControl *Form_RemoteControl;
using namespace std;

TInitCommonControlsEx ICC;
HWND hIpEdit_ServerIP;
int iServerIP, iServerPort;
AnsiString strServerIP;

TListItem *LogItem;

vector <AnsiString> clientList;
int iMuteCount = 0;
AnsiString receiveMessage;	//[ProcessName], [Command]
//---------------------------------------------------------------------------
__fastcall TForm_RemoteControl::TForm_RemoteControl(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm_RemoteControl::FormCreate(TObject *Sender)
{
	ICC.dwSize = sizeof(TInitCommonControlsEx);
	ICC.dwICC = ICC_INTERNET_CLASSES;
	if(!InitCommonControlsEx(&ICC))
		return;

	strServerIP = IdIPWatch_Server->LocalIP();
	hIpEdit_ServerIP =CreateWindow(WC_IPADDRESS,NULL,WS_CHILD|WS_VISIBLE,95,13,140,20,Panel_Network->Handle,0,HInstance,NULL);
	iServerIP=ntohl(inet_addr(strServerIP.c_str()));
	SendMessage(hIpEdit_ServerIP,IPM_SETADDRESS,0,iServerIP);

	iServerPort = Edit_LocalPort->Text.ToInt();

}
//---------------------------------------------------------------------------

void __fastcall TForm_RemoteControl::ToolButton_ConnectionClick(TObject *Sender)
{

	if(ToolButton_Connection->ImageIndex == 0)	//connection
	{
		ToolButton_Connection->ImageIndex = 1;
		ToolButton_Connection->Caption = "      Disconnect      ";
		LogItem=ListView_Log->Items->Insert(0);
		LogItem->Caption=Now().CurrentTime().FormatString("hh:nn:ss");
		LogItem->SubItems->Add("Server Online");


		IdTCPServer_Remote->DefaultPort = iServerPort;
		IdTCPServer_Remote->Active = true;

	}
	else if(ToolButton_Connection->ImageIndex == 1)
	{
		ToolButton_Connection->ImageIndex = 0;
		ToolButton_Connection->Caption = "       Connect       ";
		LogItem=ListView_Log->Items->Insert(0);
		LogItem->Caption=Now().CurrentTime().FormatString("hh:nn:ss");
		LogItem->SubItems->Add("Server Offline");
		IdTCPServer_Remote->Active = false;
	}
}
//---------------------------------------------------------------------------

void __fastcall TForm_RemoteControl::ChangeChannel(AnsiString strProcess, char *key)
{
    //http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
	Application->ProcessMessages();
	HWND netTV = FindWindow(NULL,strProcess.c_str());
	if (ShowWindow(netTV,SW_SHOWNORMAL))
	{
		Application->ProcessMessages();

		HWND hFrgWnd = ::GetForegroundWindow();
		AttachThreadInput( GetWindowThreadProcessId(hFrgWnd, NULL), GetCurrentThreadId(), TRUE );
		::SetForegroundWindow(netTV);
		::BringWindowToTop(netTV);

		for(int i=0;i<strlen(key);i++)
		{
			keybd_event(key[i], 0, 0, 0);

			int iStart = GetTickCount();
			while (GetTickCount() - iStart <= 200)
				Application->ProcessMessages();
		}
	}
	else
	{
		if(key[0] == 0x58)
		{
			WinExec("C:\\Program Files (x86)\\net-TV\\net-TV 2012\\net-TV 2012.exe",SW_SHOW);
		}
		else
			ShowMessage("Open " + strProcess + " first!");
	}
}
//---------------------------------------------------------------------------

void __fastcall TForm_RemoteControl::IdTCPServer_RemoteExecute(TIdContext *AContext)
{
	AnsiString cmd = AContext->Connection->IOHandler->ReadLn().Trim();
	TStringList *msgList = new TStringList();
	TSysCharSet sepChars;

	sepChars = TSysCharSet() << ',';
	ExtractStrings(sepChars, sepChars,  WideString(cmd).c_bstr(), msgList);
	char *keyValue = new char[msgList->Strings[1].Length()];
	if(msgList->Strings[1].Pos("CMD") == 0)
	{
		if(msgList->Strings[1].SubString(1,1) != "+" && msgList->Strings[1].Length() >0)
		{
			for(int i=0;i<msgList->Strings[1].Length();i++)
				if(msgList->Strings[1].SubString(i+1,1).ToInt() >= 0 && msgList->Strings[1].SubString(i+1,1).ToInt() <=9)
					keyValue[i] = msgList->Strings[1].SubString(i+1,1).ToInt()+0x30;
		}
		if(msgList->Strings[1].SubString(1,1) == "+" && msgList->Strings[1].Length() >0)
		{
			keyValue[0] = VK_ADD;
			for(int i=1;i<msgList->Strings[1].Length();i++)
				keyValue[i] = msgList->Strings[1].SubString(i+1,1).ToInt()+0x30;

		}

		if(keyValue[0] != VK_ADD)
		{
			if(keyValue[0] >= '0' && keyValue[0]<='9' && keyValue[1]>='0' && keyValue[1]<='9')
				ChangeChannel(msgList->Strings[0], keyValue);
		}
		else if(keyValue[0] == VK_ADD)
		{
			if(keyValue[1] >= '0' && keyValue[1]<='9' && keyValue[2]>='0' && keyValue[2]<='9')
				ChangeChannel(msgList->Strings[0], keyValue);
		}
		LogItem=ListView_Log->Items->Insert(0);
		LogItem->Caption=Now().CurrentTime().FormatString("hh:nn:ss");
		LogItem->SubItems->Add("Channel: " + msgList->Strings[1]);
		LogItem->SubItems->Add(AContext->Connection->Socket->Binding->PeerIP);
		LogItem->SubItems->Add(msgList->Strings[0]);
	}
	else
	{
		AnsiString sysCMD = msgList->Strings[1].SubString(5,msgList->Strings[1].Length()-4);
		if(sysCMD == "POWERONOFF")
		{
			keyValue[0] = 0x58;   // X
			ChangeChannel(msgList->Strings[0], keyValue);

			Application->ProcessMessages();
			AnsiString strProcessName = msgList->Strings[0];
			HWND netTV = FindWindow(NULL,strProcessName.c_str());
			if (ShowWindow(netTV,SW_SHOWNORMAL))
			{
				LogItem=ListView_Log->Items->Insert(0);
				LogItem->Caption=Now().CurrentTime().FormatString("hh:nn:ss");
				LogItem->SubItems->Add("Power Off");
				LogItem->SubItems->Add(AContext->Connection->Socket->Binding->PeerIP);
				LogItem->SubItems->Add(msgList->Strings[0]);
			}
			else
			{
				LogItem=ListView_Log->Items->Insert(0);
				LogItem->Caption=Now().CurrentTime().FormatString("hh:nn:ss");
				LogItem->SubItems->Add("Power On");
				LogItem->SubItems->Add(AContext->Connection->Socket->Binding->PeerIP);
				LogItem->SubItems->Add(msgList->Strings[0]);
            }
		}

		if(sysCMD == "MUTE")
		{
			keyValue[0] = 0x4D;	// M
			ChangeChannel(msgList->Strings[0], keyValue);

			if (iMuteCount%2 == 0)
			{
				LogItem=ListView_Log->Items->Insert(0);
				LogItem->Caption=Now().CurrentTime().FormatString("hh:nn:ss");
				LogItem->SubItems->Add("Mute");
				LogItem->SubItems->Add(AContext->Connection->Socket->Binding->PeerIP);
				LogItem->SubItems->Add(msgList->Strings[0]);
				iMuteCount++;
			}
			else
			{
				LogItem=ListView_Log->Items->Insert(0);
				LogItem->Caption=Now().CurrentTime().FormatString("hh:nn:ss");
				LogItem->SubItems->Add("Unmute");
				LogItem->SubItems->Add(AContext->Connection->Socket->Binding->PeerIP);
				LogItem->SubItems->Add(msgList->Strings[0]);
				iMuteCount++;
            }
		}

		if(sysCMD == "VOLUP")
		{
			keyValue[0] = VK_RIGHT;	// ->
			ChangeChannel(msgList->Strings[0], keyValue);

			LogItem=ListView_Log->Items->Insert(0);
			LogItem->Caption=Now().CurrentTime().FormatString("hh:nn:ss");
			LogItem->SubItems->Add("Vol Up");
			LogItem->SubItems->Add(AContext->Connection->Socket->Binding->PeerIP);
			LogItem->SubItems->Add(msgList->Strings[0]);

		}

		if(sysCMD == "VOLDOWN")
		{
			keyValue[0] = VK_LEFT;	// <-
			ChangeChannel(msgList->Strings[0], keyValue);

			LogItem=ListView_Log->Items->Insert(0);
			LogItem->Caption=Now().CurrentTime().FormatString("hh:nn:ss");
			LogItem->SubItems->Add("Vol Down");
			LogItem->SubItems->Add(AContext->Connection->Socket->Binding->PeerIP);
			LogItem->SubItems->Add(msgList->Strings[0]);

		}

		if(sysCMD == "CHNEXT")
		{
			keyValue[0] = VK_UP;	// ->
			ChangeChannel(msgList->Strings[0], keyValue);

			LogItem=ListView_Log->Items->Insert(0);
			LogItem->Caption=Now().CurrentTime().FormatString("hh:nn:ss");
			LogItem->SubItems->Add("Vol Up");
			LogItem->SubItems->Add(AContext->Connection->Socket->Binding->PeerIP);
			LogItem->SubItems->Add(msgList->Strings[0]);

		}

		if(sysCMD == "CHBACK")
		{
			keyValue[0] = VK_DOWN;	// <-
			ChangeChannel(msgList->Strings[0], keyValue);

			LogItem=ListView_Log->Items->Insert(0);
			LogItem->Caption=Now().CurrentTime().FormatString("hh:nn:ss");
			LogItem->SubItems->Add("Vol Down");
			LogItem->SubItems->Add(AContext->Connection->Socket->Binding->PeerIP);
			LogItem->SubItems->Add(msgList->Strings[0]);

		}
	}

}
//---------------------------------------------------------------------------
void __fastcall TForm_RemoteControl::IdTCPServer_RemoteConnect(TIdContext *AContext)
{
	LogItem=ListView_Log->Items->Insert(0);
	LogItem->Caption=Now().CurrentTime().FormatString("hh:nn:ss");
	LogItem->SubItems->Add("Connect Request");
	LogItem->SubItems->Add(AContext->Connection->Socket->Binding->PeerIP);
}
//---------------------------------------------------------------------------

void __fastcall TForm_RemoteControl::IdTCPServer_RemoteDisconnect(TIdContext *AContext)
{
	LogItem=ListView_Log->Items->Insert(0);
	LogItem->Caption=Now().CurrentTime().FormatString("hh:nn:ss");
	LogItem->SubItems->Add("Client Disconnected");
	LogItem->SubItems->Add(AContext->Connection->Socket->Binding->PeerIP);
}
//---------------------------------------------------------------------------

 

Leave a Reply