module client; import util; // Specialization of audio recorder for sending recorded audio // data through the network class NetworkRecorder : SoundRecorder { public: // Constructor this(SocketTCP Socket) { mySocket = Socket; } ~this() { delete mySocket; } protected: override bool onStart() { return true; } override void onStop() { } override bool onProcessSamples(short[] samples) { // Pack the audio samples into a network packet Packet PacketOut = new Packet(); PacketOut.set(AudioData); PacketOut.append((cast(byte*)samples.ptr)[0..samples.length * short.sizeof]); // Send the audio packet to the server return mySocket.send(PacketOut) == SocketStatus.DONE; } SocketTCP mySocket; ///< Socket used to communicate with the server } void runClient(IPAddress adr, int port) { // Create a TCP socket for communicating with server SocketTCP Socket = new SocketTCP(); // Connect to the specified server if (!Socket.connect(port, adr)) return; // Wait for user input... Cout("Press enter to start recording audio").newline; Cin.get(); // Create a instance of our custom recorder NetworkRecorder Recorder = new NetworkRecorder(Socket); // Start capturing audio data Recorder.start(44100); Cout("Press enter to stop recording audio").newline; Cin.get(); Recorder.stop(); // Send a "end-of-stream" packet Packet PacketOut = new Packet(); PacketOut.set(EndOfStream); Socket.send(PacketOut); }