00001 00030 #include <itpp/protocol/tcp.h> 00031 00032 00033 namespace itpp { 00034 00036 00037 00041 class TCP_Server_Application { 00042 public: 00044 TCP_Server_Application() { 00045 write.set_name("TcpServerApplicationWriteSignal"); 00046 write.set_debug(); 00047 } 00049 ~TCP_Server_Application() { } 00050 00052 Signal<itpp::Packet*> write; 00053 00055 void write_to_net(unsigned byte_size, double delta_time) { 00056 itpp::Packet *packet = new Packet(8*byte_size); 00057 write(packet, delta_time); 00058 00059 std::cout << "TcpServerApplication::write_to_net," 00060 << " byte_size=" << packet->bit_size()/8 00061 << " ptr=" << packet 00062 << " time=" << Event_Queue::now() << std::endl; 00063 } 00064 }; 00065 00069 class TCP_Client_Application { 00070 public: 00072 TCP_Client_Application(TCP_Sender *tcp_snd_p, TCP_Receiver *tcp_recv_p) { 00073 tcp_receiver_p = tcp_recv_p; 00074 tcp_sender_p = tcp_snd_p; 00075 nbr_bytes_received = 0; 00076 select.forward(this, &TCP_Client_Application::received_packet_indication); 00077 select.set_name("TcpClientApplicationSelectSlot"); 00078 seq_num_index = 0; 00079 } 00080 00082 ~TCP_Client_Application() { } 00083 00085 Slot<TCP_Client_Application, int> select; 00086 00088 void read_from_net(unsigned byte_size) { 00089 nbr_bytes_to_receive = byte_size; 00090 seq_num_val.set_size(10+byte_size/1460); 00091 seq_num_val.zeros(); 00092 seq_num_time.set_size(10+byte_size/1460); 00093 seq_num_time.zeros(); 00094 seq_num_val(0) = 0; 00095 seq_num_time(0) = 0; 00096 seq_num_index=1; 00097 }; 00098 00099 private: 00100 TCP_Receiver *tcp_receiver_p; 00101 TCP_Sender *tcp_sender_p; 00102 unsigned nbr_bytes_received; 00103 unsigned nbr_bytes_to_receive; 00104 00105 vec seq_num_val; 00106 vec seq_num_time; 00107 int seq_num_index; 00108 00109 void TCP_Client_Application::received_packet_indication(int label) { 00110 00111 itpp::Packet &packet = tcp_receiver_p->get_user_message(); 00112 nbr_bytes_received = nbr_bytes_received + packet.bit_size()/8; 00113 delete &packet; 00114 00115 if (seq_num_index >= seq_num_time.size()) { 00116 seq_num_time.set_size(2*seq_num_time.size(),true); 00117 seq_num_val.set_size(2*seq_num_val.size(),true); 00118 } 00119 00120 seq_num_val(seq_num_index) = nbr_bytes_received; 00121 seq_num_time(seq_num_index) = Event_Queue::now(); 00122 seq_num_index++; 00123 00124 std::cout << "### sequence number: " << nbr_bytes_received 00125 << " ### time:" << Event_Queue::now() << std::endl; 00126 00127 if (nbr_bytes_received >= nbr_bytes_to_receive) { 00128 std::cout << "###### Stop sender and receiver" << std::endl; 00129 tcp_receiver_p->release(); 00130 tcp_sender_p->release(); 00131 tcp_sender_p->save_trace("seq_num.it"); 00132 seq_num_val.set_size(seq_num_index, true); 00133 seq_num_time.set_size(seq_num_index,true); 00134 save_to_file("seq_num.it"); 00135 } 00136 } 00137 00138 void TCP_Client_Application::save_to_file(string file) { 00139 00140 it_file ff2(file); 00141 ff2 << Name("seq_num_val") << seq_num_val; 00142 ff2 << Name("seq_num_time") << seq_num_time; 00143 ff2 << Name("seq_num_index") << seq_num_index; 00144 ff2.flush(); 00145 ff2.close(); 00146 } 00147 00148 }; 00149 00151 00152 } // namespace itpp
Generated on Sun Dec 9 17:26:19 2007 for IT++ by Doxygen 1.5.4