summaryrefslogtreecommitdiffstats
path: root/tests/manual/planets-qml/planets-watchos/PlanetsClient WatchKit Extension/InterfaceController.m
blob: 77f0520025fbd60ca47f6b2a1080600e9253d260 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only

#import "InterfaceController.h"

@interface InterfaceController() <WCSessionDelegate>

@end

@implementation InterfaceController

- (id)init {
    if ((self = [super init])) {
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSString *host = [defaults stringForKey:@"host"];
        int port = [defaults integerForKey:@"port"];

        if (host == nil) {
            self.host = @"127.0.0.1";
        } else {
            self.host = host;
        }

        if (port == 0) {
            self.port = [NSNumber numberWithInt:8080];
        } else {
            self.port = [NSNumber numberWithInt:port];
        }

        self.planets = @[@"Sun",
                         @"Mercury",
                         @"Venus",
                         @"Earth",
                         @"Mars",
                         @"Jupiter",
                         @"Saturn",
                         @"Uranus",
                         @"Neptune",
                         @"Solar System"];

        self.minimumValue = 1.0f;
        self.maximumValue = 10.0f;
    }

    return self;
}

- (void)awakeWithContext:(id)context {
    [super awakeWithContext:context];

    int planetsCount = [self.planets count];

    NSMutableArray *pickerItems = [[NSMutableArray alloc] init];

    for (int i = 0; i < planetsCount; i++) {
        WKPickerItem *item = [WKPickerItem alloc];
        item.title = self.planets[i];
        [pickerItems addObject:item];
    }

    [self.planetPicker setItems:pickerItems];

    [self.hostLabel setText:[NSString stringWithFormat:@"%@:%@", self.host, [NSString stringWithFormat:@"%d", [self.port intValue]]]];
}

- (void)willActivate {
    [super willActivate];

    if ([WCSession isSupported]) {
        WCSession *session = [WCSession defaultSession];
        session.delegate = self;
        [session activateSession];
    }
}

- (IBAction)selectedPlanetChanged:(NSInteger)value {
    NSString *command = [@[@"selectPlanet", self.planets[value]] componentsJoinedByString:@"/"];

    [self sendCommand:command];
}

- (IBAction)rotationSpeedChanged:(float)value {
    NSString* formattedValue = [NSString stringWithFormat:@"%.02f", (value - self.minimumValue) /
                                (self.maximumValue - self.minimumValue)];
    NSString *command = [@[@"setRotationSpeed", formattedValue] componentsJoinedByString:@"/"];

    [self sendCommand:command];
}

- (IBAction)viewingDistanceChanged:(float)value {
    NSString* formattedValue = [NSString stringWithFormat:@"%.02f", (value - self.minimumValue) /
                                (self.maximumValue - self.minimumValue)];
    NSString *command = [@[@"setViewingDistance", formattedValue] componentsJoinedByString:@"/"];

    [self sendCommand:command];
}

- (IBAction)planetSizeChanged:(float)value {
    NSString* formattedValue = [NSString stringWithFormat:@"%.02f", (value - self.minimumValue) /
                                (self.maximumValue - self.minimumValue)];
    NSString *command = [@[@"setPlanetSize", formattedValue] componentsJoinedByString:@"/"];

    [self sendCommand:command];
}


- (void)sendCommand:(NSString *)command {
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

    NSURLComponents *urlComponents = [[NSURLComponents alloc] init];
    urlComponents.scheme = @"http";
    urlComponents.host = self.host;
    urlComponents.port = self.port;
    urlComponents.path = [NSString stringWithFormat:@"/%@", command];

    [request setURL:urlComponents.URL];
    [request setHTTPMethod:@"GET"];

    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response,
                                                              NSError *error) {}] resume];
}

- (void)session:(nonnull WCSession *)session didReceiveMessage:(nonnull NSDictionary *)message replyHandler:(nonnull void (^)(NSDictionary<NSString *,id> *))replyHandler {
    NSString *host = [message objectForKey:@"host"];
    NSString *port = [message objectForKey:@"port"];

    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    numberFormatter.numberStyle = NSNumberFormatterNoStyle;

    self.host = host;
    self.port = [numberFormatter numberFromString:port];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:host forKey:@"host"];
    [defaults setInteger:[self.port integerValue] forKey:@"port"];
    [defaults synchronize];

    [self.hostLabel setText:[NSString stringWithFormat:@"%@:%@", host, port]];
}

- (void)session:(WCSession *)session activationDidCompleteWithState:(WCSessionActivationState)activationState error:(NSError *)error {

}

@end