mirror of
https://github.com/oonyeje/Get-Hip.git
synced 2025-12-25 03:37:40 +00:00
94 lines
2.1 KiB
Objective-C
Executable File
94 lines
2.1 KiB
Objective-C
Executable File
//
|
|
// TDAudioStream.m
|
|
// TDAudioStreamer
|
|
//
|
|
// Created by Tony DiPasquale on 10/4/13.
|
|
// Copyright (c) 2013 Tony DiPasquale. The MIT License (MIT).
|
|
//
|
|
|
|
#import "TDAudioStream.h"
|
|
|
|
@interface TDAudioStream () <NSStreamDelegate>
|
|
|
|
@property (strong, nonatomic) NSStream *stream;
|
|
|
|
@end
|
|
|
|
@implementation TDAudioStream
|
|
|
|
- (instancetype)initWithInputStream:(NSInputStream *)inputStream
|
|
{
|
|
self = [super init];
|
|
if (!self) return nil;
|
|
|
|
self.stream = inputStream;
|
|
|
|
return self;
|
|
}
|
|
|
|
- (instancetype)initWithOutputStream:(NSOutputStream *)outputStream
|
|
{
|
|
self = [super init];
|
|
if (!self) return nil;
|
|
|
|
self.stream = outputStream;
|
|
|
|
return self;
|
|
}
|
|
|
|
- (void)open
|
|
{
|
|
self.stream.delegate = self;
|
|
[self.stream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
|
|
return [self.stream open];
|
|
}
|
|
|
|
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
|
|
{
|
|
switch (eventCode) {
|
|
case NSStreamEventHasBytesAvailable:
|
|
[self.delegate audioStream:self didRaiseEvent:TDAudioStreamEventHasData];
|
|
break;
|
|
|
|
case NSStreamEventHasSpaceAvailable:
|
|
[self.delegate audioStream:self didRaiseEvent:TDAudioStreamEventWantsData];
|
|
break;
|
|
|
|
case NSStreamEventEndEncountered:
|
|
[self.delegate audioStream:self didRaiseEvent:TDAudioStreamEventEnd];
|
|
break;
|
|
|
|
case NSStreamEventErrorOccurred:
|
|
[self.delegate audioStream:self didRaiseEvent:TDAudioStreamEventError];
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
- (UInt32)readData:(uint8_t *)data maxLength:(UInt32)maxLength
|
|
{
|
|
return (UInt32)[(NSInputStream *)self.stream read:data maxLength:maxLength];
|
|
}
|
|
|
|
- (UInt32)writeData:(uint8_t *)data maxLength:(UInt32)maxLength
|
|
{
|
|
return (UInt32)[(NSOutputStream *)self.stream write:data maxLength:maxLength];
|
|
}
|
|
|
|
- (void)close
|
|
{
|
|
[self.stream close];
|
|
self.stream.delegate = nil;
|
|
[self.stream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
|
|
}
|
|
|
|
- (void)dealloc
|
|
{
|
|
if (self.stream)
|
|
[self close];
|
|
}
|
|
|
|
@end
|