Browse Source

Add some error handling to Peak_Server.

tags/non-daw-v1.1.0
Jonathan Moore Liles 17 years ago
parent
commit
0b67f85b60
1 changed files with 25 additions and 8 deletions
  1. +25
    -8
      Engine/Peak_Server.C

+ 25
- 8
Engine/Peak_Server.C View File

@@ -25,17 +25,23 @@

/* Peak Server

The peak server streams peak data to any timeline editors or other clients that ask for it.
The Peak Server streams peak data to any Timeline Editors or other
clients that ask for it.

Peak request looks like:
Peak request looks like (in ASCII)

> read_peaks "foo.wav" fpp start end

Response looks like (in binary floats):
Where "foo.wav" is the base name. (actual filenames may differ if
the channels of the source are 'broken out')

> channels length min max min max min max
length ...
Response looks like (in binary)

> (int)channels (int)length (float)min max min max min max
> length ...

Were length specifies the number of Peaks (min/max pairs). The
first channel is transmitted first, and any others follow.
*/

#include "Audio_File.H"
@@ -43,7 +49,6 @@

typedef unsigned long tick_t;


#define PEAK_PORT 6100

void
@@ -68,10 +73,22 @@ Peak_Server::handle_request ( int s, const char *buf, int l )
tick_t start, end;

if ( 4 != sscanf( buf, "read_peaks \"%[^\"]\" %f %lu %lu", source, &fpp, &start, &end ) )
fprintf( stderr, "error: malformed peak request!\n" );
{
const char *err = "error: malformed request\n";
fprintf( stderr, err );
send( s, err, strlen( err ), 0 );
return;
}

Audio_File *af = Audio_File::from_file( source );

if ( ! af )
{
const char *err = "error: could not open source\n";
send( s, err, strlen( err ), 0 );
return;
}

int channels = af->channels();

send( s, &channels, sizeof( int ), 0 );
@@ -87,5 +104,5 @@ Peak_Server::handle_request ( int s, const char *buf, int l )
send( s, pk->peakbuf(), peaks * sizeof( Peak ), 0 );
}

delete af;
// delete af;
}

Loading…
Cancel
Save