Skip to content
Snippets Groups Projects
Commit 2ccb1c5e authored by 남성찬's avatar 남성찬
Browse files
parents b74d7d87 398a2279
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python
import getopt
import sys
import threading
import _thread
from coapthon.server.coap import CoAP
from exampleresources import BleInfoResource, RasbpNodeInfoResource, RasbpGraphInfoResource
......@@ -16,6 +17,10 @@ class CoAPServer(CoAP):
print(("CoAP Server start on " + host + ":" + str(port)))
print((self.root.dump()))
def updateUserLocation(self):
pass
def usage(): # pragma: no cover
print("coapserver.py -i <ip address> -p <port>")
......@@ -43,7 +48,10 @@ def main(argv): # pragma: no cover
server = CoAPServer(ip, port, multicast)
try:
updateUserLocationThread = threading.Thread(target = server.updateUserLocation)
updateUserLocationThread.start()
server.listen(10)
except KeyboardInterrupt:
print("Server Shutdown")
server.close()
......
......@@ -4,7 +4,6 @@ from pymongo import MongoClient
from coapthon import defines
from coapthon.resources.resource import Resource
class RasbpNodeInfoResource(Resource):
def __init__(self, name="RasbpNodeInfo"):
super(RasbpNodeInfoResource, self).__init__(name)
......@@ -20,6 +19,10 @@ class RasbpNodeInfoResource(Resource):
self.payload = request.payload
from coapthon.messages.response import Response
assert(isinstance(response, Response))
self.payload = json.loads(self.payload)
if self.payload['option'] == 1:
self.calculateNodePosition(sefl.payload)
else :
response.payload = self.postRasbpNodeInfoInDB(self.payload)
response.code = defines.Codes.CREATED.number
return self, response
......@@ -28,21 +31,23 @@ class RasbpNodeInfoResource(Resource):
self.payload = request.payload
from coapthon.messages.response import Response
assert(isinstance(response, Response))
self.payload = json.loads(self.payload)
if self.payload['option'] == 1:
self.calculateNodePosition(self.payload)
else :
response.payload = self.postRasbpNodeInfoInDB(self.payload)
response.code = defines.Codes.CHANGED.number
return self, response
def postRasbpNodeInfoInDB(self, info):
info = info.decode('ascii')
info = info['myMAC']
self.collection.delete_many({ 'rasbpMAC' : info })
ruuid = "52528282"+str(uuid.uuid4())[8:]
ruuid = ruuid.replace("-","")
if self.collection.count() == 0:
payload = {
'rasbpMAC' : info,
'uuid' : ruuid,
'x' : '0',
'y' : '0'
'uuid' : ruuid
}
self.collection.insert_one(payload)
......@@ -54,26 +59,33 @@ class RasbpNodeInfoResource(Resource):
payload = {
'rasbpMAC' : info,
'uuid' : ruuid,
'x' : '-1',
'y' : '-1'
}
self.collection.insert_one(payload)
response = json.dumps({
'uuid' : str(ruuid),
'uuid' : ruuid,
'operate' : 1
})
return response
def calculateNodePosition(self, info):
print("Start calculateNodePosition")
info = info['myuuid']
graphColletion = self.db.RasbpGraphData
mydoc = self.collection.find({'uuid': info})
if mydoc.count() == 1:
if self.collection.count() == 1:
pass
else if self.collection.count() == 2:
pass
else if self.collection.count() == 3:
pass
else:
pass
# else :
# mydocList = list(mydoc)
# if mydocList[0]['operation'] != '1':
# self.collection.update_one(mydocList[0], { "$set" : {"operation" : '1'}})
# response = "re-operate"
# else :
# response = "already operate"
else :
print("This is not registered Node")
return response
class RasbpGraphInfoResource(Resource):
def __init__(self, name="RasbpGraphInfo"):
......@@ -115,13 +127,27 @@ class RasbpGraphInfoResource(Resource):
return True, response
def postRasbpGraphInfoInDB(self, info):
"""
info = json.loads(info)
mydoc = self.collection.find({'v1':info['v1'], 'v2':info['v2']})
if mydoc.count() > 0:
distance = (mydoc[0]['sum']+info['distance']) / (mydoc[0]['count'] + 1)
self.collection.update({ 'v1' : info['v1'], 'v2':info['v2']}, {
'v1':info['v1'],
'v2': info['v2'],
'distance' : distance,
'sum': mydoc[0]['sum']+float(info['distance']),
'count': mydoc[0]['count']+1
}, upsert=True)
if mydoc.count() == 0:
mydoc = self.collection.find({ 'v1' : info['v2'], 'v2' : info['v1']})
"""
pass
self.collection.update({ 'v1' : info['v1'], 'v2':info['v2']}, {
'v1':info['v1'],
'v2': info['v2'],
'distance' : float(info['distance']),
'sum': float(info['distance']),
'count': 1
}, upsert=True)
class BleInfoResource(Resource):
def __init__(self, name="BleInfo"):
......@@ -164,8 +190,4 @@ class BleInfoResource(Resource):
return True, response
def postBLEInfoInDB(self, payload):
j = json.loads(payload)
for i in j:
self.collection
self.collection.insert_many(json.loads(payload))
var mongoose = require('mongoose');
const Schema = mongoose.Schema;
const trackingSchema = new Schema({
rasbpID: { type: String, default: "" },
uuid: { type: String, default: "" },
distance: { type: Number, default: 0 },
updateTime : { type: Number, default: 0 }
}, { collection : 'TrackingData', // 컬렉션명 지정
versionKey : false, // "__v" 필드 생성X
strict : false }
);
//users collection
module.exports = mongoose.model('TrackingData', trackingSchema);
\ No newline at end of file
......@@ -2,7 +2,7 @@ var express = require('express');
var router = express.Router();
var uuidv1 = require('uuid/v1');
var User = require('../models/users');
var Tracking = require('../models/tracking');
/*
var User = require('../models/users');
......@@ -50,13 +50,25 @@ router.post('/DeleteUser', function(req, res) {
// ( SINCE DELETE OPERATION IS IDEMPOTENT, NO NEED TO SPECIFY )
//if(!output.result.n) return res.status(404).json({ error: "user not found" });
//res.json({ message: "user deleted" });
res.json({message: output, res : req.body});
})
});
router.post('/findByUUID', function(req, res) {
uuid = req.body.uuid
Tracking.find({uuid:req.body.uuid}, function(err, output){
if(err) return res.status(500).json({ error: "database failure" });
// ( SINCE DELETE OPERATION IS IDEMPOTENT, NO NEED TO SPECIFY )
//if(!output.result.n) return res.status(404).json({ error: "user not found" });
//res.json({ message: "user deleted" });
res.json({message: output, res : req.body});
})
});
router.post('/', function(req, res, next) {
console.log(req.body)
res.render('index', { title: 'Express' });
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment