`
haoningabc
  • 浏览: 1476492 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用websocket,双ibeacons判断方向

    博客分类:
  • ios
阅读更多
只调用ibeacon的接口
//
//  ViewController.m
//  ibb
//
//  Created by xiao7 on 14/12/15.
//  Copyright (c) 2014年 killinux. All rights reserved.
//

#import "ViewController.h"
@import CoreLocation;

@interface ViewController () <CLLocationManagerDelegate>
@property NSMutableDictionary *beacons;
@property CLLocationManager *locationManager;
@property NSMutableDictionary *rangedRegions;

@property (nonatomic, copy, readonly) NSArray *supportedProximityUUIDs;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"viewDidLoad------");
    self.beacons = [[NSMutableDictionary alloc] init];
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    [self.locationManager requestAlwaysAuthorization];
    
    self.rangedRegions = [[NSMutableDictionary alloc] init];
    _supportedProximityUUIDs = @[
                                 [[NSUUID alloc] initWithUUIDString:@"E2C56DB5-DFFB-48D2-B060-D0F5A71096E0"],
                                 [[NSUUID alloc] initWithUUIDString:@"DDDDDDDD-DDDD-DDDD-AAAA-DDDDDDDDDDDD"]
                                 //,[[NSUUID alloc] initWithUUIDString:@"DDDDDDDD-DDDD-DDDD-DDDD-DDDDDDDDDDDD"]
                                 ];
    for (NSUUID *uuid in _supportedProximityUUIDs)
    {
        CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:[uuid UUIDString]];
        self.rangedRegions[region] = [NSArray array];
    }
}
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    for (CLBeaconRegion *region in self.rangedRegions)
    {
        [self.locationManager startRangingBeaconsInRegion:region];
    }
}
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
{
    NSLog(@"locationManager--------didRangeBeacons:%d",beacons.count);
    self.rangedRegions[region] = beacons;
    [self.beacons removeAllObjects];
    NSLog(@"locationManager-begin");
    if(beacons.count!=0){
        NSArray *allvalue=[self.rangedRegions allValues];
        if(allvalue.count==2){
            NSArray *regionResult = allvalue[0];
            CLBeacon *thisregion = regionResult[0];
            //NSLog(@"--%.2f", thisregion.accuracy);
            NSArray *regionResult2 = allvalue[1];
            if(regionResult2.count>0){
                CLBeacon *thisregion2 = regionResult2[0];
                // NSLog(@"--%.2f", thisregion2.accuracy);
                if(thisregion.accuracy>0 && thisregion2.accuracy>0){
                    NSLog(@"%.2f", thisregion2.accuracy-thisregion.accuracy);
                    if((thisregion2.accuracy-thisregion.accuracy)<0){
                        NSLog(@"left");
                    }else{
                        //NSLog(@"%.2f", ABS(thisregion2.accuracy-thisregion.accuracy));
                        if(ABS(thisregion2.accuracy-thisregion.accuracy)<0.1){
                            NSLog(@"w");
                        }else{
                            NSLog(@"right");
                        }
                    }
                }
            }
        }
    }
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end



加上websocket的接口

//
//  ViewController.m
//  ibb
//
//  Created by xiao7 on 14/12/15.
//  Copyright (c) 2014年 killinux. All rights reserved.
//

#import "ViewController.h"
#import "SocketRocket/SRWebSocket.h"
@import CoreLocation;

@interface ViewController () <CLLocationManagerDelegate,SRWebSocketDelegate>


@property NSMutableDictionary *beacons;
@property CLLocationManager *locationManager;
@property NSMutableDictionary *rangedRegions;

@property (nonatomic, copy, readonly) NSArray *supportedProximityUUIDs;

@property (nonatomic, strong) SRWebSocket *mywebSocket;


@end

@implementation ViewController
//NSString *websocket_url = @"ws://haoning.net/webs/websocket/test";
NSString *websocket_url = @"ws://192.168.0.112:8000/chat";

- (void)viewDidLoad {
    [super viewDidLoad];
    //websocket init
    _mywebSocket.delegate = nil;
    [_mywebSocket close];
    _mywebSocket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:websocket_url]]];
    _mywebSocket.delegate = self;
    [_mywebSocket open];
    NSLog(@"viewDidLoad------");
    self.beacons = [[NSMutableDictionary alloc] init];
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    [self.locationManager requestAlwaysAuthorization];
    
    self.rangedRegions = [[NSMutableDictionary alloc] init];
    _supportedProximityUUIDs = @[
                                 [[NSUUID alloc] initWithUUIDString:@"E2C56DB5-DFFB-48D2-B060-D0F5A71096E0"],
                                 [[NSUUID alloc] initWithUUIDString:@"DDDDDDDD-DDDD-DDDD-AAAA-DDDDDDDDDDDD"]
                                 //,[[NSUUID alloc] initWithUUIDString:@"DDDDDDDD-DDDD-DDDD-DDDD-DDDDDDDDDDDD"]
                                 ];
    for (NSUUID *uuid in _supportedProximityUUIDs)
    {
        CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:[uuid UUIDString]];
        self.rangedRegions[region] = [NSArray array];
    }
    
}
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    for (CLBeaconRegion *region in self.rangedRegions)
    {
        [self.locationManager startRangingBeaconsInRegion:region];
    }
}
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
{
    NSLog(@"locationManager--------didRangeBeacons:%d",beacons.count);
    self.rangedRegions[region] = beacons;
    [self.beacons removeAllObjects];
    NSLog(@"locationManager-begin");
    if(beacons.count!=0){
        NSArray *allvalue=[self.rangedRegions allValues];
        if(allvalue.count==2){
            NSArray *regionResult = allvalue[0];
            CLBeacon *thisregion = regionResult[0];
            //NSLog(@"--%.2f", thisregion.accuracy);
            NSArray *regionResult2 = allvalue[1];
            if(regionResult2.count>0){
                CLBeacon *thisregion2 = regionResult2[0];
                // NSLog(@"--%.2f", thisregion2.accuracy);
                if(thisregion.accuracy>0 && thisregion2.accuracy>0){
                    NSLog(@"%.2f", thisregion2.accuracy-thisregion.accuracy);
                    if((thisregion2.accuracy-thisregion.accuracy)<0){
                        NSLog(@"left");
                        [_mywebSocket send:@"a"];
                    }else{
                        //NSLog(@"%.2f", ABS(thisregion2.accuracy-thisregion.accuracy));
                        if(ABS(thisregion2.accuracy-thisregion.accuracy)<0.1){
                            NSLog(@"w");
                            [_mywebSocket send:@"w"];
                        }else{
                            NSLog(@"right");
                            [_mywebSocket send:@"d"];
                        }
                    }
                }
            }
        }
    }
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
//----------------
//pragma websocket
- (void)webSocketDidOpen:(SRWebSocket *)webSocket;
{
    NSLog(@"Websocket Connected");
    self.title = @"Connected!";
}

- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;
{
    NSLog(@":( Websocket Failed With Error %@", error);
    _mywebSocket = nil;
}

- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message;
{
    NSLog(@"websocket Received \"%@\"", message);
    NSArray *messageArray = [message componentsSeparatedByString:@","];
    if(messageArray.count<3){
        NSLog(@"error parameter not right:%@",message);
        //        NSDictionary *dict8 = [NSDictionary dictionaryWithObjectsAndKeys:@"haoning",@"name",message,@"content", nil];
        //        [_resultArray addObject:dict8];
    }else{
        NSDictionary *dict8 = [NSDictionary dictionaryWithObjectsAndKeys:messageArray[0],@"name",messageArray[2],@"content", nil];

    }

}

- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;
{
    NSLog(@"WebSocket closed");
    self.title = @"Connection Closed! (see logs)";
    _mywebSocket = nil;
}
@end




websocket的服务端代码,使用tornado
#!/usr/bin/python
#coding:utf-8
import os.path

import tornado.httpserver
import tornado.web
import tornado.ioloop
import tornado.options
import tornado.httpclient
import tornado.websocket

import json

import RPi.GPIO as GPIO
import time
#GPIO.setwarnings(False) 
#GPIO.setmode(GPIO.BCM)
#GPIO.setup(17,GPIO.OUT)
#GPIO.setup(18,GPIO.OUT)
#GPIO.setup(22,GPIO.OUT)
#GPIO.setup(23,GPIO.OUT)



class IndexHandler(tornado.web.RequestHandler):
    def get(self):
      self.render("index.html")

class SocketHandler(tornado.websocket.WebSocketHandler):
    """docstring for SocketHandler"""
    clients = set()

    @staticmethod
    def send_to_all(message):
        for c in SocketHandler.clients:
            c.write_message(json.dumps(message))

    def open(self):
#        GPIO.setwarnings(False) 
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(17,GPIO.OUT)
        GPIO.setup(18,GPIO.OUT)
        GPIO.setup(22,GPIO.OUT)
        GPIO.setup(23,GPIO.OUT)
        self.write_message(json.dumps({
        'type': 'sys',
        'message': 'Welcome to WebSocket',
        }))
        SocketHandler.send_to_all({
        'type': 'sys',
        'message': str(id(self)) + ' has joined',
        })
        SocketHandler.clients.add(self)

    def on_close(self):
        SocketHandler.clients.remove(self)
        SocketHandler.send_to_all({
        'type': 'sys',
        'message': str(id(self)) + ' has left',
        })

    def on_message(self, message):
        if(message == 'w'):
            GPIO.output(17,False) 
            GPIO.output(18,True)
            GPIO.output(22,False)
            GPIO.output(23,True)
        elif(message == 'a'):
            GPIO.output(17,False)
            GPIO.output(18,True)
            GPIO.output(22,False)
            GPIO.output(23,False)
        elif(message == 'd'):
            GPIO.output(17,False)
            GPIO.output(18,False)
            GPIO.output(22,False)
            GPIO.output(23,True)
        elif(message == 's'):
            GPIO.output(17,True)
            GPIO.output(18,False)
            GPIO.output(22,True)
            GPIO.output(23,False)
        else:
            GPIO.output(17,False)
            GPIO.output(18,False)
            GPIO.output(22,False)
            GPIO.output(23,False)
        SocketHandler.send_to_all({
            'type': 'user',
            'id': id(self),
            'message': message,
        })
    
##MAIN
if __name__ == '__main__':
    app = tornado.web.Application(
      handlers=[
        (r"/", IndexHandler),
        (r"/chat", SocketHandler)
      ],
    debug = True,
    #  template_path = os.path.join(os.path.dirname(__file__), "templates"),
    #     static_path = os.path.join(os.path.dirname(__file__), "static")
    )
    app.listen(8000)
    tornado.ioloop.IOLoop.instance().start()

分享到:
评论

相关推荐

    在openwrt中使用websocket,基于makefile。

    总的来说,通过在OpenWRT上使用WebSocket,你可以创建一个能够实时交互的智能设备,无论是用于远程控制还是实时数据交换,都能带来更好的用户体验。而这个过程需要对嵌入式系统、网络协议以及C/C++编程有深入的理解...

    websocket双向连接

    在实现WebSocket应用时,开发者通常会使用WebSocket库或者框架,例如JavaScript中的`ws`库,它简化了WebSocket的创建和管理。在服务器端,可以使用Node.js的`ws`库,Python的` autobahn`或`websockets`库,Java的`...

    在android的webview中实现websocket通信

    在 GitHub 上,有一个名为 android-websockets 的开源项目,该项目使用 Java NIO 库来实现 WebSocket 技术,可以使得开发者可以在 Android 上使用 WebSocket 技术来实现实时通信。该项目提供了一些示例代码,展示了...

    使用WebSocket协议接收ActiveMQ消息

    使用WebSocket与ActiveMQ进行交互,首先需要了解WebSocket URL的格式。在描述中提到,WebSocket协议的URL以"ws://"开头,这是非加密的WebSocket连接。如果需要加密传输,可以使用"WSS://",这相当于WebSocket的SSL/...

    c++使用websocket代码Demo.可直接编译

    在本文中,我们将深入探讨如何使用C++编程语言与WebSocket协议进行交互,特别是在结合Boost库、jsoncpp库和websocketpp库的情况下。这个压缩包提供的代码示例是一个完整的C++ WebSocket客户端或服务器应用,可以直接...

    使用WebSocket+SpringBoot搭建简易的多人聊天室

    使用WebSocket+SpringBoot搭建简易的多人聊天室 由浅入深,配合博客入门教程文章食用,风味独特。 使用WebSocket+SpringBoot搭建简易的多人聊天室 由浅入深,配合博客入门教程文章食用,风味独特。 使用WebSocket+...

    微信小程序webSocket的使用方法

    本篇博客介绍微信小程序中webSocket的使用方法,以及如何用局部网络建立webSocket连接,进行客户端与服务器之间的对话: webSocket简介 微信小程序端API调用 服务器端使用nodejs配置 演示websocket webSocket...

    原生nodejs使用websocket代码分享.docx

    在原生的 Node.js 环境中,我们可以使用 `ws` 这个库来轻松地实现 WebSocket 功能。下面将详细介绍如何在 Node.js 中使用 WebSocket。 首先,你需要安装 `ws` 库。你可以通过 npm(Node.js 包管理器)来进行安装: ...

    SpringBoot+Mybatis-Plus使用webSocket实现一对一聊天 后台

    【SpringBoot+Mybatis-Plus使用webSocket实现一对一聊天后台】的实现主要涉及以下几个关键知识点: 一、WebSocket协议 WebSocket是一种在单个TCP连接上进行全双工通信的协议,它使得客户端和服务器之间的数据交换变...

    webSocket实现Android客户端之间简单的通讯

    WebSocket是一种在客户端和服务器之间建立持久连接的协议,它允许双方进行全双工通信,即数据可以在两个方向上同时传输,极大地提高了实时性。在Android客户端间实现WebSocket通讯,可以用于构建聊天应用、游戏同步...

    thinkphp6使用workerman websocket连接

    本文将深入探讨在ThinkPHP6框架中如何使用Workerman库来实现WebSocket连接,以及相关的技术要点。 首先,`ThinkPHP6` 是一个基于 PHP7 开发的轻量级且强大的国产PHP框架,其核心设计理念是“简洁、实用、快速”。它...

    websocket需要用到jar包

    为了使用这些库实现WebSocket功能,你需要在项目中导入这些jar包,并根据WebSocket API创建服务器端的WebSocket端点(实现WebSocketServerEndpointConfig接口)和客户端的WebSocket连接(使用WebSocketClient)。...

    web项目使用websocket

    总结,WebSocket结合Tomcat可以构建高效的实时通信系统,通过在服务器端定义WebSocket端点类和在客户端使用WebSocket API,可以实现双向数据流,为网页提供实时信息显示功能。在实际开发中,还可以结合其他技术,如...

    使用webSocket实现聊天室

    在本文中,我们将深入探讨如何使用WebSocket技术来实现一个简单的聊天室功能。 首先,我们需要理解WebSocket的核心概念。WebSocket是HTML5的一个重要特性,它通过创建持久性的连接,允许双向通信,即服务器可以主动...

    MFC使用websocket客户端的用例,附带github原生的实例

    在本文中,我们将深入探讨如何在C++环境中,特别是在Microsoft Foundation Classes (MFC)框架下,使用WebSocket客户端。WebSocket是一种在互联网上实现双向通信的协议,它为实时应用提供了低延迟、高效的通信方式。...

    实时聊天应用程序:使用WebSocket实现双向通信

    实时聊天应用程序:使用WebSocket实现双向通信

    Unity3D插件BestHttp,用于做websocket使用

    2. **配置WebSocket连接**:在Unity脚本中,使用BestHttp提供的WebSocket类来创建和管理连接。你需要指定WebSocket服务器的URL,并设置相应的连接参数。 3. **建立连接**:调用WebSocket的Open方法来建立与服务器的...

    WebSocket教程

    WebSocket是一种在客户端和服务器之间建立持久连接的协议,它允许双方进行全双工通信,即数据可以在任意方向上同时传输。这种技术对于实时性要求高的应用,如在线游戏、聊天室、股票交易、实时数据分析等场景非常...

    uni-app中H5、PC端websocket使用

    在uni-app框架中,我们不仅可以使用WebSocket在移动H5环境中,还可以扩展到桌面PC端,实现高效且实时的数据交互。 在uni-app中,WebSocket的使用主要包括以下几个关键步骤: 1. **初始化WebSocket连接**: 在uni-...

    springboot使用websocket的js文件

    它在浏览器端创建一个WebSocket-like的对象,通过这个对象,你可以像使用WebSocket一样使用它,而不用担心浏览器兼容性问题。 最后,`stomp.js`是STOMP协议的JavaScript实现,它提供了简单的API来订阅和发布消息。...

Global site tag (gtag.js) - Google Analytics