| Index: remoting/ios/bridge/host_proxy.mm
|
| diff --git a/remoting/ios/bridge/host_proxy.mm b/remoting/ios/bridge/host_proxy.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1573f9c83a5180e68a1088980a3efbe932582914
|
| --- /dev/null
|
| +++ b/remoting/ios/bridge/host_proxy.mm
|
| @@ -0,0 +1,119 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#import "remoting/ios/bridge/host_proxy.h"
|
| +
|
| +#import "remoting/ios/data_store.h"
|
| +#import "remoting/ios/host_preferences.h"
|
| +#import "remoting/ios/bridge/client_instance.h"
|
| +#import "remoting/ios/bridge/client_proxy.h"
|
| +
|
| +@implementation HostProxy
|
| +
|
| +// Override default constructor and initialize internals
|
| +- (id)init {
|
| + self = [super init];
|
| + if (self) {
|
| + _isConnected = false;
|
| + }
|
| + return self;
|
| +}
|
| +
|
| +// Override default destructor
|
| +- (void)dealloc {
|
| + if (_isConnected) {
|
| + [self disconnectFromHost];
|
| + }
|
| +
|
| + [super dealloc];
|
| +}
|
| +
|
| +- (BOOL)isConnected {
|
| + return _isConnected;
|
| +}
|
| +
|
| +- (void)connectToHost:(NSString*)username
|
| + authToken:(NSString*)token
|
| + jabberId:(NSString*)jid
|
| + hostId:(NSString*)hostId
|
| + publicKey:(NSString*)hostPublicKey
|
| + delegate:(id<ClientProxyDelegate>)delegate {
|
| + // Implicitly, if currently connected, discard the connection and begin a new
|
| + // connection.
|
| + [self disconnectFromHost];
|
| +
|
| + NSString* pairId = @"";
|
| + NSString* pairSecret = @"";
|
| +
|
| + const HostPreferences* hostPrefs =
|
| + [[DataStore sharedStore] getHostForId:hostId];
|
| +
|
| + // Use the pairing id and secret when known
|
| + if (hostPrefs && hostPrefs.pairId && hostPrefs.pairSecret) {
|
| + pairId = [hostPrefs.pairId copy];
|
| + pairSecret = [hostPrefs.pairSecret copy];
|
| + }
|
| +
|
| + _hostToClientChannel.reset(new remoting::ClientProxy(
|
| + [ClientProxyDelegateWrapper wrapDelegate:delegate]));
|
| +
|
| + DCHECK(!_clientToHostChannel);
|
| + _clientToHostChannel =
|
| + new remoting::ClientInstance(_hostToClientChannel->AsWeakPtr(),
|
| + [username UTF8String],
|
| + [token UTF8String],
|
| + [jid UTF8String],
|
| + [hostId UTF8String],
|
| + [hostPublicKey UTF8String],
|
| + [pairId UTF8String],
|
| + [pairSecret UTF8String]);
|
| +
|
| + _clientToHostChannel->Start();
|
| + _isConnected = YES;
|
| +}
|
| +
|
| +- (void)authenticationResponse:(NSString*)pin createPair:(BOOL)createPair {
|
| + if (_isConnected) {
|
| + _clientToHostChannel->ProvideSecret([pin UTF8String], createPair);
|
| + }
|
| +}
|
| +
|
| +- (void)disconnectFromHost {
|
| + if (_isConnected) {
|
| + VLOG(1) << "Disconnecting from Host";
|
| +
|
| + // |_clientToHostChannel| must be closed before releasing
|
| + // |_hostToClientChannel|
|
| +
|
| + // |_clientToHostChannel| owns several objects that have references to
|
| + // itself. These objects need to be cleaned up before we can release
|
| + // |_clientToHostChannel|.
|
| + _clientToHostChannel->Cleanup();
|
| + // All other references to |_clientToHostChannel| should now be free. When
|
| + // the next statement is executed the destructor is called automatically.
|
| + _clientToHostChannel = NULL;
|
| +
|
| + _hostToClientChannel.reset();
|
| +
|
| + _isConnected = NO;
|
| + }
|
| +}
|
| +
|
| +- (void)mouseAction:(const webrtc::DesktopVector&)position
|
| + wheelDelta:(const webrtc::DesktopVector&)wheelDelta
|
| + whichButton:(NSInteger)buttonPressed
|
| + buttonDown:(BOOL)buttonIsDown {
|
| + if (_isConnected) {
|
| + _clientToHostChannel->PerformMouseAction(
|
| + position, wheelDelta, buttonPressed, buttonIsDown);
|
| + }
|
| +}
|
| +
|
| +- (void)keyboardAction:(NSInteger)keyCode keyDown:(BOOL)keyIsDown {
|
| + if (_isConnected) {
|
| + _clientToHostChannel->PerformKeyboardAction(keyCode, keyIsDown);
|
| + }
|
| +}
|
| +
|
| +@end
|
|
|