gikoha’s blog

個人的メモがわり

L-04D情報ソフト

L-04D情報ソフトを作ってみた
いまんところSSIDが予め設定されているもの(=L-04DのSSIDに設定しておく)だった場合、L-04Dにアクセスしてネットワークと信号強度、転送バイト数を表示するだけのもの

もうちょっとグラフィカルにひねるべきだが...
ソースの一部を示します

#import <SystemConfiguration/CaptiveNetwork.h>
#import "SBJson.h"

@interface ViewController ()

@end

@implementation ViewController

- (NSDictionary*)parseURL: (NSString*)urlString
{
    NSStringEncoding usedEncoding;
    NSError *error;
    
    NSURL *url = [NSURL URLWithString:urlString];
    NSString *str = [NSString stringWithContentsOfURL:url usedEncoding:&usedEncoding error:&error];
    if(!str)    return nil;

    NSArray *jsons = [str componentsSeparatedByString:@"="];
    NSString *str1 = [jsons objectAtIndex:1];
    NSArray *jsons1 = [str1 componentsSeparatedByString:@";"];

    SBJsonParser *parser = [SBJsonParser new];
    return [parser objectWithString:[jsons1 objectAtIndex:0]];
}

- (void)setSSID
{
    CFArrayRef interfaces = CNCopySupportedInterfaces();
    CFDictionaryRef dicRef = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(interfaces, 0));
    
    if (!dicRef)    return;         // No connection

    NSString *ssid = CFDictionaryGetValue(dicRef, kCNNetworkInfoKeySSID);
    [self.ssidtext setText:ssid];
    
    if([ssid isEqualToString:[self.ssidmatch text]])        // L04DのSSIDなら接続してデータをとりにいく
    {
        NSDictionary *resArr = [self parseURL:@"http://192.168.2.1/json/status.json"];

        NSString *connNetwork = resArr? [resArr objectForKey:@"Network selection"] : nil;   // 3G,LTE,nil
        NSString *connStrength =resArr? [resArr objectForKey:@"Signal strength"] : nil;     // Signal strength
        
        
        resArr = [self parseURL:@"http://192.168.2.1/json/data_usage.json"];
        NSString *usageStr =resArr? [resArr objectForKey:@"Curr_usage"] : nil;              // Current data usage in bytes
        NSString *clientsStr =resArr? [resArr objectForKey:@"Connected clients"] : nil;     // Current wifi clients
        [self.result setText:[NSString stringWithFormat:@"%@ %@, %@ bytes", connNetwork, connStrength, usageStr]];
    }
    else
        [self.result setText:@"No connection to L04D SSID"];

}

...