int main()
{
  int ret = 0;
  try
  {
	string srcAddr = "127.0.0.1", srcPort ="8484" , targetAddr = "127.0.0.1", targetPort ="8181" ,  targetCommunicator = "file_processor";
	Message msg, msgEcho; Header hdr, hdrEcho;
	hdr.setCmd("send_file");
	hdr.setAddr(targetAddr, targetPort);//IP address
	hdr.setAttrib("filename","D:/proj3/SocketDemo2/Test/sender/foobar.txt");//name value pairs
	hdr.setAttrib("msg", "File transfer");
	hdr.setSrcAddr(srcAddr, srcPort);
	hdr.setContentLength(1024);
	hdr.setTargetCommunicator("FileHandlerCommunicator");
	msg.setHdr(hdr);
	hdrEcho.setCmd("echo_msg");
	hdrEcho.setAttrib("msg", "Hi there!");
	hdrEcho.setAddr(targetAddr, targetPort);//IP address
	hdrEcho.setSrcAddr(srcAddr, srcPort);
	hdrEcho.setTargetCommunicator("EchoCommunicator");
	msgEcho.setHdr(hdrEcho);
	Sender sndr1;
	int clientPort = 8484;
	Receiver rcvr;
	rcvr.connect(clientPort);
	EchoCommunicator echo;
	echo.setName(CLientEchoCommunicator);
	rcvr.registerComm(&echo);
	echo.start();
	sndr1.start();
	sndr1.postMessage(msgEcho);
	sndr1.e(msg);
	echo.wait();
	rcvr.wait();
	sndr1.wait();
	sout << "That's all folks!";
  }
  catch(std::exception& ex)
  {
    sout << "\n\n  " << ex.what();
    ret = 1;
  }
  catch(...)
  {
    sout << "\n\n  something bad happend to a sender";
    ret = 1;
  }
  std::cout << "\n\n  That's all Folks!\n\n";
  return ret;
}
int main()
{
	int ret = 0;
	try
	{
		Receiver rcvr;
		rcvr.connect(8181);
		EchoCommunicator echo;

		echo.setName("EchoCommunicator");
		rcvr.registerComm(&echo);
		echo.start();

		FileProcessingCommunicator fileComm;
		fileComm.setName("FileHandlerCommunicator");
		rcvr.registerComm(&fileComm);
		fileComm.start();
		string targetAddr = "127.0.0.1", targetPort = "8080";
		Sender sender;
		sender.setName("SenderCommunicator");
		rcvr.registerComm(&sender);
		sender.start();

		StringSearchCommunicator stringSearchComm;
		stringSearchComm.setName("StringSearchCommunicator");
		rcvr.registerComm(&stringSearchComm);
		stringSearchComm.start();

		echo.wait();
		fileComm.wait();
		echo.stop();
		fileComm.stop();
	}
	catch (std::exception& ex)
	{
		std::cout << "\n\n  " << ex.what();
		ret = 1;
	}
	catch (...)
	{
		sout << "\n  something bad happened";
		ret = 1;
	}
	sout << "\n\n";
	return ret;
}