/* * blockingUDPTest.cpp * * Created on: Dec 28, 2010 * Author: Miha Vitorovic */ #include #include #include #include #include #include #include #include using namespace epics::pvAccess; using namespace epics::pvData; using namespace std; using std::tr1::static_pointer_cast; class ContextImpl : public Context { public: ContextImpl() {} virtual ~ContextImpl() { } virtual Timer::shared_pointer getTimer() { return Timer::shared_pointer(); } virtual std::tr1::shared_ptr getTransportRegistry() { return std::tr1::shared_ptr(); } virtual std::tr1::shared_ptr getChannel(epics::pvAccess::pvAccessID) { return std::tr1::shared_ptr(); } virtual Transport::shared_pointer getSearchTransport() { return Transport::shared_pointer(); } virtual Configuration::shared_pointer getConfiguration() { return Configuration::shared_pointer(); } virtual void acquire() {} virtual void release() {} virtual void beaconAnomalyNotify() {} }; class DummyResponseHandler : public ResponseHandler { public: DummyResponseHandler(Context* context) : packets(0) { } virtual ~DummyResponseHandler() {} int getPackets() { return packets; } virtual void handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const &, int8 version, int8 command, int payloadSize, ByteBuffer* payloadBuffer); private: int packets; }; void DummyResponseHandler::handleResponse(osiSockAddr* responseFrom, Transport::shared_pointer const &, int8 version, int8 command, int payloadSize, ByteBuffer* payloadBuffer) { std::ostringstream os; cout<<"Received new UDP datagram["<ia, ipAddressStr, sizeof(ipAddressStr)); cout<<"From: "<get(payload, 0, dataCount); os<<"Payload ("< rh(static_cast(drh)); osiSockAddr bindAddr; bindAddr.ia.sin_family = AF_INET; bindAddr.ia.sin_port = htons(65000); bindAddr.ia.sin_addr.s_addr = htonl(INADDR_ANY); TransportClient::shared_pointer nullPointer; Transport::shared_pointer transport(connector.connect(nullPointer,rh, bindAddr, 1, 50)); static_pointer_cast(transport)->start(); cout<<"Waiting for 10 packets..."<getPackets()<10) { epicsThreadSleep(1.0); } } int main(int argc, char *argv[]) { // createFileLogger("testBlockingUDPSrv.log"); testBlockingUDPConnector(); return (0); }