Index: webrtc/base/maccocoasocketserver.mm |
diff --git a/webrtc/base/maccocoasocketserver.mm b/webrtc/base/maccocoasocketserver.mm |
deleted file mode 100644 |
index 034737ebccc8128d0528312aa2263a59bde0e58c..0000000000000000000000000000000000000000 |
--- a/webrtc/base/maccocoasocketserver.mm |
+++ /dev/null |
@@ -1,139 +0,0 @@ |
-/* |
- * Copyright 2012 The WebRTC Project Authors. All rights reserved. |
- * |
- * Use of this source code is governed by a BSD-style license |
- * that can be found in the LICENSE file in the root of the source |
- * tree. An additional intellectual property rights grant can be found |
- * in the file PATENTS. All contributing project authors may |
- * be found in the AUTHORS file in the root of the source tree. |
- */ |
-#import "webrtc/base/maccocoasocketserver.h" |
- |
-#import <Foundation/Foundation.h> |
-#import <AppKit/AppKit.h> |
- |
-#include "webrtc/base/scoped_autorelease_pool.h" |
- |
-// MacCocoaSocketServerHelperRtc serves as a delegate to NSMachPort or a target for |
-// a timeout. |
-@interface MacCocoaSocketServerHelperRtc : NSObject { |
- // This is a weak reference. This works fine since the |
- // rtc::MacCocoaSocketServer owns this object. |
- rtc::MacCocoaSocketServer* socketServer_; // Weak. |
-} |
-@end |
- |
-@implementation MacCocoaSocketServerHelperRtc |
-- (id)initWithSocketServer:(rtc::MacCocoaSocketServer*)ss { |
- self = [super init]; |
- if (self) { |
- socketServer_ = ss; |
- } |
- return self; |
-} |
- |
-- (void)timerFired:(NSTimer*)timer { |
- socketServer_->WakeUp(); |
-} |
- |
-- (void)breakMainloop { |
- [NSApp stop:self]; |
- // NSApp stop only exits after finishing processing of the |
- // current event. Since we're potentially in a timer callback |
- // and not an NSEvent handler, we need to trigger a dummy one |
- // and turn the loop over. We may be able to skip this if we're |
- // on the ss' thread and not inside the app loop already. |
- NSEvent* event = [NSEvent otherEventWithType:NSApplicationDefined |
- location:NSMakePoint(0,0) |
- modifierFlags:0 |
- timestamp:0 |
- windowNumber:0 |
- context:nil |
- subtype:0 |
- data1:0 |
- data2:0]; |
- [NSApp postEvent:event atStart:NO]; |
-} |
-@end |
- |
-namespace rtc { |
- |
-MacCocoaSocketServer::MacCocoaSocketServer() { |
- helper_ = [[MacCocoaSocketServerHelperRtc alloc] initWithSocketServer:this]; |
- timer_ = nil; |
- run_count_ = 0; |
- |
- // Initialize the shared NSApplication |
- [NSApplication sharedApplication]; |
-} |
- |
-MacCocoaSocketServer::~MacCocoaSocketServer() { |
- [timer_ invalidate]; |
- [timer_ release]; |
- [helper_ release]; |
-} |
- |
-// ::Wait is reentrant, for example when blocking on another thread while |
-// responding to I/O. Calls to [NSApp] MUST be made from the main thread |
-// only! |
-bool MacCocoaSocketServer::Wait(int cms, bool process_io) { |
- rtc::ScopedAutoreleasePool pool; |
- if (!process_io && cms == 0) { |
- // No op. |
- return true; |
- } |
- if ([NSApp isRunning]) { |
- // Only allow reentrant waiting if we're in a blocking send. |
- ASSERT(!process_io && cms == kForever); |
- } |
- |
- if (!process_io) { |
- // No way to listen to common modes and not get socket events, unless |
- // we disable each one's callbacks. |
- EnableSocketCallbacks(false); |
- } |
- |
- if (kForever != cms) { |
- // Install a timer that fires wakeup after cms has elapsed. |
- timer_ = |
- [NSTimer scheduledTimerWithTimeInterval:cms / 1000.0 |
- target:helper_ |
- selector:@selector(timerFired:) |
- userInfo:nil |
- repeats:NO]; |
- [timer_ retain]; |
- } |
- |
- // Run until WakeUp is called, which will call stop and exit this loop. |
- run_count_++; |
- [NSApp run]; |
- run_count_--; |
- |
- if (!process_io) { |
- // Reenable them. Hopefully this won't cause spurious callbacks or |
- // missing ones while they were disabled. |
- EnableSocketCallbacks(true); |
- } |
- |
- return true; |
-} |
- |
-// Can be called from any thread. Post a message back to the main thread to |
-// break out of the NSApp loop. |
-void MacCocoaSocketServer::WakeUp() { |
- if (timer_ != nil) { |
- [timer_ invalidate]; |
- [timer_ release]; |
- timer_ = nil; |
- } |
- |
- // [NSApp isRunning] returns unexpected results when called from another |
- // thread. Maintain our own count of how many times to break the main loop. |
- if (run_count_ > 0) { |
- [helper_ performSelectorOnMainThread:@selector(breakMainloop) |
- withObject:nil |
- waitUntilDone:false]; |
- } |
-} |
- |
-} // namespace rtc |