12 #include <ecl/config/ecl.hpp> 
   47 using ecl::SocketClient;
 
   52 using ecl::MilliSleep;
 
   62         Reader(SocketClient &socket_server, 
bool timestamps_reqd, 
bool hex_format_reqd = 
false) :
 
   63                 socket(socket_server),
 
   64                 timestamps(timestamps_reqd),
 
   71         Format<unsigned char> hex_format(-1,
NoAlign,
Hex);
 
   76         if ( hex ) { std::cout << 
"Hex format" << std::endl; } 
else { std::cout << 
"Ascii format" << std::endl; }
 
   79             ch_read = socket.read(c);
 
   83                         if ( new_line ) { timestamp.stamp(); }
 
   84                                         std::cout << 
"[" << timestamp << 
"] : ";
 
   86                     std::cout << hex_format(c) << std::endl;
 
   88                     if ( timestamps && new_line ) {
 
   90                                         std::cout << 
"[" << timestamp << 
"] : ";
 
   98                         } 
else if ( c == 
'\n' ) {
 
  102             } 
else if ( ch_read < 0 ) {
 
  104                     std::cout << 
"Server Hung Up." << std::endl;
 
  116         SocketClient &socket;
 
  125         Writer(SocketClient &socket_server, 
bool timestamps_reqd) : socket(socket_server), timestamps(timestamps_reqd) {}
 
  130         memset(buffer,0,256);
 
  133             if ( fgets(buffer,80,stdin) == NULL ) {
 
  139             while ( *s_ptr != 
'\0') { ++s_ptr; }
 
  140             if ( timestamps ) { timestamp.stamp(); }
 
  141             socket.write(buffer,s_ptr - buffer);
 
  143                 std::cout << 
"[" << timestamp << 
"] : ";
 
  153         SocketClient &socket;
 
  171 int main(
int argc, 
char** argv) {
 
  173     std::cout << std::endl;
 
  174     std::cout << 
"***********************************************************" << std::endl;
 
  175     std::cout << 
"                 Parsing Command Line" << std::endl;
 
  176     std::cout << 
"***********************************************************" << std::endl;
 
  177     std::cout << std::endl;
 
  182     bool timestamps(
false);
 
  185         CmdLine cmd(
"This is a simple interface for making a socket client connection.",
' ',
"0.1");
 
  186         ValueArg<string> arg_hostname(
"n",
"hostname",
"Hostname of the server [localhost]",
false,
"localhost",
"string");
 
  187         ValueArg<int> arg_port(
"p",
"port",
"Port number to connect to [1470].",
false,1470,
"integer");
 
  188         SwitchArg switch_timestamps(
"t",
"timestamp",
"Timestamp incoming/outgoings.",
false);
 
  189         SwitchArg switch_hex(
"x",
"hex",
"Enable hex output.",
false);
 
  191         cmd.add(arg_hostname);
 
  194         cmd.add(switch_timestamps);
 
  195         cmd.parse(argc,argv);
 
  197         hostname = arg_hostname.getValue();
 
  198         port = arg_port.getValue();
 
  199         hex = switch_hex.getValue();
 
  200         timestamps = switch_timestamps.getValue();
 
  202     } 
catch ( ArgException &e ) {
 
  203         std::cerr << 
"error: " << e.error() << 
" for arg " << e.argId() << std::endl;
 
  206     std::cout << 
"Connecting to: " << hostname << 
" [" << port << 
"]" << std::endl;
 
  208     std::cout << std::endl;
 
  209     std::cout << 
"***********************************************************" << std::endl;
 
  210     std::cout << 
"                   Read and Write Threads   " << std::endl;
 
  211     std::cout << 
"***********************************************************" << std::endl;
 
  212     std::cout << std::endl;
 
  214     SocketClient client(hostname,port);
 
  215     Writer writer(client,timestamps);
 
  216     Reader reader(client,timestamps,hex);
 
  217     Thread read_thread(&Reader::loop, reader);
 
  218     Thread write_thread(&Writer::loop, writer);
 
  224     std::cout << std::endl;
 
  225     std::cout << 
"***********************************************************" << std::endl;
 
  226     std::cout << 
"                      Passed" << std::endl;
 
  227     std::cout << 
"***********************************************************" << std::endl;
 
  228     std::cout << std::endl;
 
  236 #if !defined ECL_IS_POSIX || ECL_IS_MAC 
  240 int main(
int argc, 
char **argv) {
 
  242         std::cout << 
"This is a posix (not mac) only app." << std::endl;