Skip to content
Snippets Groups Projects
Commit 398a2279 authored by Server (Shared Users)'s avatar Server (Shared Users)
Browse files

...

parent 4bd76e51
Branches
No related tags found
No related merge requests found
#!/usr/bin/env python #!/usr/bin/env python
import getopt import getopt
import sys import sys
import threading
import _thread
from coapthon.server.coap import CoAP from coapthon.server.coap import CoAP
from exampleresources import BleInfoResource, RasbpNodeInfoResource, RasbpGraphInfoResource from exampleresources import BleInfoResource, RasbpNodeInfoResource, RasbpGraphInfoResource
...@@ -16,6 +17,10 @@ class CoAPServer(CoAP): ...@@ -16,6 +17,10 @@ class CoAPServer(CoAP):
print(("CoAP Server start on " + host + ":" + str(port))) print(("CoAP Server start on " + host + ":" + str(port)))
print((self.root.dump())) print((self.root.dump()))
def updateUserLocation(self):
pass
def usage(): # pragma: no cover def usage(): # pragma: no cover
print("coapserver.py -i <ip address> -p <port>") print("coapserver.py -i <ip address> -p <port>")
...@@ -43,7 +48,10 @@ def main(argv): # pragma: no cover ...@@ -43,7 +48,10 @@ def main(argv): # pragma: no cover
server = CoAPServer(ip, port, multicast) server = CoAPServer(ip, port, multicast)
try: try:
updateUserLocationThread = threading.Thread(target = server.updateUserLocation)
updateUserLocationThread.start()
server.listen(10) server.listen(10)
except KeyboardInterrupt: except KeyboardInterrupt:
print("Server Shutdown") print("Server Shutdown")
server.close() server.close()
......
...@@ -4,7 +4,6 @@ from pymongo import MongoClient ...@@ -4,7 +4,6 @@ from pymongo import MongoClient
from coapthon import defines from coapthon import defines
from coapthon.resources.resource import Resource from coapthon.resources.resource import Resource
class RasbpNodeInfoResource(Resource): class RasbpNodeInfoResource(Resource):
def __init__(self, name="RasbpNodeInfo"): def __init__(self, name="RasbpNodeInfo"):
super(RasbpNodeInfoResource, self).__init__(name) super(RasbpNodeInfoResource, self).__init__(name)
...@@ -20,6 +19,10 @@ class RasbpNodeInfoResource(Resource): ...@@ -20,6 +19,10 @@ class RasbpNodeInfoResource(Resource):
self.payload = request.payload self.payload = request.payload
from coapthon.messages.response import Response from coapthon.messages.response import Response
assert(isinstance(response, 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.payload = self.postRasbpNodeInfoInDB(self.payload)
response.code = defines.Codes.CREATED.number response.code = defines.Codes.CREATED.number
return self, response return self, response
...@@ -28,21 +31,23 @@ class RasbpNodeInfoResource(Resource): ...@@ -28,21 +31,23 @@ class RasbpNodeInfoResource(Resource):
self.payload = request.payload self.payload = request.payload
from coapthon.messages.response import Response from coapthon.messages.response import Response
assert(isinstance(response, 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.payload = self.postRasbpNodeInfoInDB(self.payload)
response.code = defines.Codes.CHANGED.number response.code = defines.Codes.CHANGED.number
return self, response return self, response
def postRasbpNodeInfoInDB(self, info): def postRasbpNodeInfoInDB(self, info):
info = info.decode('ascii') info = info['myMAC']
self.collection.delete_many({ 'rasbpMAC' : info }) self.collection.delete_many({ 'rasbpMAC' : info })
ruuid = "52528282"+str(uuid.uuid4())[8:] ruuid = "52528282"+str(uuid.uuid4())[8:]
ruuid = ruuid.replace("-","")
if self.collection.count() == 0: if self.collection.count() == 0:
payload = { payload = {
'rasbpMAC' : info, 'rasbpMAC' : info,
'uuid' : ruuid, 'uuid' : ruuid
'x' : '0',
'y' : '0'
} }
self.collection.insert_one(payload) self.collection.insert_one(payload)
...@@ -54,26 +59,33 @@ class RasbpNodeInfoResource(Resource): ...@@ -54,26 +59,33 @@ class RasbpNodeInfoResource(Resource):
payload = { payload = {
'rasbpMAC' : info, 'rasbpMAC' : info,
'uuid' : ruuid, 'uuid' : ruuid,
'x' : '-1',
'y' : '-1'
} }
self.collection.insert_one(payload) self.collection.insert_one(payload)
response = json.dumps({ response = json.dumps({
'uuid' : str(ruuid), 'uuid' : ruuid,
'operate' : 1 '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 : else :
# mydocList = list(mydoc) print("This is not registered Node")
# if mydocList[0]['operation'] != '1':
# self.collection.update_one(mydocList[0], { "$set" : {"operation" : '1'}})
# response = "re-operate"
# else :
# response = "already operate"
return response
class RasbpGraphInfoResource(Resource): class RasbpGraphInfoResource(Resource):
def __init__(self, name="RasbpGraphInfo"): def __init__(self, name="RasbpGraphInfo"):
...@@ -115,13 +127,27 @@ class RasbpGraphInfoResource(Resource): ...@@ -115,13 +127,27 @@ class RasbpGraphInfoResource(Resource):
return True, response return True, response
def postRasbpGraphInfoInDB(self, info): def postRasbpGraphInfoInDB(self, info):
"""
info = json.loads(info) info = json.loads(info)
mydoc = self.collection.find({'v1':info['v1'], 'v2':info['v2']}) 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: if mydoc.count() == 0:
mydoc = self.collection.find({ 'v1' : info['v2'], 'v2' : info['v1']}) self.collection.update({ 'v1' : info['v1'], 'v2':info['v2']}, {
""" 'v1':info['v1'],
pass 'v2': info['v2'],
'distance' : float(info['distance']),
'sum': float(info['distance']),
'count': 1
}, upsert=True)
class BleInfoResource(Resource): class BleInfoResource(Resource):
def __init__(self, name="BleInfo"): def __init__(self, name="BleInfo"):
...@@ -164,8 +190,4 @@ class BleInfoResource(Resource): ...@@ -164,8 +190,4 @@ class BleInfoResource(Resource):
return True, response return True, response
def postBLEInfoInDB(self, payload): def postBLEInfoInDB(self, payload):
j = json.loads(payload)
for i in j:
self.collection
self.collection.insert_many(json.loads(payload)) 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'); ...@@ -2,7 +2,7 @@ var express = require('express');
var router = express.Router(); var router = express.Router();
var uuidv1 = require('uuid/v1'); var uuidv1 = require('uuid/v1');
var User = require('../models/users'); var User = require('../models/users');
var Tracking = require('../models/tracking');
/* /*
var User = require('../models/users'); var User = require('../models/users');
...@@ -50,13 +50,25 @@ router.post('/DeleteUser', function(req, res) { ...@@ -50,13 +50,25 @@ router.post('/DeleteUser', function(req, res) {
// ( SINCE DELETE OPERATION IS IDEMPOTENT, NO NEED TO SPECIFY ) // ( SINCE DELETE OPERATION IS IDEMPOTENT, NO NEED TO SPECIFY )
//if(!output.result.n) return res.status(404).json({ error: "user not found" }); //if(!output.result.n) return res.status(404).json({ error: "user not found" });
//res.json({ message: "user deleted" }); //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}); res.json({message: output, res : req.body});
}) })
}); });
router.post('/', function(req, res, next) { router.post('/', function(req, res, next) {
console.log(req.body) console.log(req.body)
res.render('index', { title: 'Express' }); 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