$search
00001 #include <dashel/dashel.h> 00002 #include <iostream> 00003 #include <cassert> 00004 00005 using namespace std; 00006 using namespace Dashel; 00007 00008 #define LOCAL_ECHO 00009 00010 class MicroTerm: public Hub 00011 { 00012 public: 00013 MicroTerm(const char* t0, const char* t1) 00014 { 00015 s0 = connect(t0); 00016 s1 = connect(t1); 00017 } 00018 00019 protected: 00020 Stream* s0; 00021 Stream* s1; 00022 00023 void connectionCreated(Stream *stream) 00024 { 00025 cout << "Incoming connection " << stream->getTargetName() << " (" << stream << ")" << endl; 00026 } 00027 00028 void incomingData(Stream *stream) 00029 { 00030 assert(s0); 00031 assert(s1); 00032 00033 char c; 00034 stream->read(&c, 1); 00035 if (stream == s0) 00036 { 00037 #ifdef LOCAL_ECHO 00038 if(c == 4) 00039 stop(); 00040 #ifdef WIN32 00041 if(c == '\r') 00042 cout << std::endl; 00043 else 00044 #endif 00045 cout << c; 00046 #endif 00047 s1->write(&c, 1); 00048 } 00049 else 00050 { 00051 #ifdef WIN32 00052 if(c == '\r') 00053 cout << std::endl; 00054 else 00055 #endif 00056 cout << c; 00057 cout.flush(); 00058 } 00059 } 00060 00061 void connectionClosed(Stream *stream, bool abnormal) 00062 { 00063 cout << "Closed connection " << stream->getTargetName() << " (" << stream << ")"; 00064 if (abnormal) 00065 cout << " : " << stream->getFailReason(); 00066 cout << endl; 00067 stop(); 00068 } 00069 }; 00070 00071 int main(int argc, char* argv[]) 00072 { 00073 if (argc != 3) 00074 { 00075 cerr << "Usage: " << argv[0] << " inputTarget destTarget" << endl; 00076 return 1; 00077 } 00078 00079 try 00080 { 00081 MicroTerm microTerm(argv[1], argv[2]); 00082 00083 microTerm.run(); 00084 } 00085 catch (DashelException e) 00086 { 00087 std::cerr << e.what() << std::endl; 00088 } 00089 00090 return 0; 00091 }