Skip to content

Commit a1ff9ae

Browse files
committed
Update
1 parent 566bad5 commit a1ff9ae

File tree

9 files changed

+230
-173
lines changed

9 files changed

+230
-173
lines changed

cloud/index.js

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -87,37 +87,31 @@ io.use(function(socket, next) {
8787
io.on('connection', function(socket){
8888
console.log('a gateway connected');
8989
//TODO(Hudo): Use Socket .join instead of array
90+
if(!socket.user) {
91+
socket.disconnect();
92+
return
93+
}
94+
9095
socket.join(String(socket.user._id));
9196

9297
io.to(String(socket.user._id)).emit("discovery");
9398

9499
socket.on("discovery response", function(resource) {
95100
console.log("New device " + resource.id);
96-
var host = resource.host;
97-
delete resource.host;
98-
var discoveryResponse = {
99-
addr: host,
100-
resource: resource
101-
}
102-
io.to(String(socket.user._id)).emit("discovery response", discoveryResponse);
101+
102+
io.to(String(socket.user._id)).emit("discovery response", resource);
103103
socket.emit("get", {identifier: resource.id});
104104
});
105105

106-
socket.on("get response", function(getResponse) {
106+
socket.on("get response", function(resource) {
107107
console.log("Get response");
108-
var hostAddr = getResponse.host;
109-
delete getResponse.host;
110-
var host = {
111-
addr: hostAddr,
112-
resource: getResponse
113-
}
114-
io.to(String(socket.user._id)).emit("get response", host);
108+
io.to(String(socket.user._id)).emit("get response", resource);
115109

116-
ResourceController.registerResource(socket.user._id, getResponse)
110+
ResourceController.registerResource(socket.user._id, resource)
117111
.then(() => {
118-
console.log(getResponse.identifier + " registered successfuly");
112+
console.log(resource.identifier + " registered successfuly");
119113
}, (reason) => {
120-
console.log("Failed to register resource: " + getResponse.identifier);
114+
console.log("Failed to register resource: " + resource.identifier);
121115
console.log(reason);
122116
});
123117
});
@@ -140,6 +134,9 @@ io.on('connection', function(socket){
140134
console.log("Action received");
141135
console.log(action);
142136
switch(action.type) {
137+
case 'DISCOVER_RESOURCE':
138+
io.to(String(socket.user._id)).emit("discovery");
139+
return;
143140
case 'GET_RESOURCE':
144141
io.to(String(socket.user._id)).emit("get", {identifier: action.resourceId});
145142
return;
@@ -149,6 +146,13 @@ io.on('connection', function(socket){
149146
case 'DEOBSERVE_RESOURCE':
150147
io.to(String(socket.user._id)).emit("deobserve", {identifier: action.resourceId});
151148
return;
149+
case 'PUT_RESOURCE':
150+
io.to(String(socket.user._id))
151+
.emit("put", {
152+
identifier: action.resourceId,
153+
attrs: [action.attr]
154+
});
155+
return;
152156
default:
153157
console.log("Unknown Action Type: " + action.type);
154158
return;

webapp/src/actions/resourceActions.js

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,36 @@
11

2-
export function rcvdDiscoverResource(host) {
2+
export function rcvdDiscoverResource(resource) {
33
return {
44
type: 'RCVD_DISCOVER_RESOURCE',
5-
host
5+
resource
66
};
77
}
88

9-
export function rcvdDiscoverDevice(host) {
9+
export function rcvdDiscoverDevice(resource) {
1010
return {
1111
type: 'RCVD_DISCOVER_DEVICE',
12-
host
12+
resource
1313
};
1414
}
1515

16-
export function rcvdDiscoverPlatform(host) {
16+
export function rcvdDiscoverPlatform(resource) {
1717
return {
1818
type: 'RCVD_DISCOVER_PLATFORM',
19-
host
19+
resource
2020
};
2121
}
2222

23-
export function rcvdGetResource(host) {
23+
export function rcvdGetResource(resource) {
2424
return {
2525
type: 'RCVD_GET_RESOURCE',
26-
host
26+
resource
27+
};
28+
}
29+
30+
export function discoverResources() {
31+
return {
32+
type: 'DISCOVER_RESOURCE',
33+
remote: true
2734
};
2835
}
2936

@@ -56,4 +63,15 @@ export function deobserveResource(resourceId) {
5663
resourceId,
5764
remote: true
5865
};
66+
}
67+
68+
export function onAttrChangeAction(data) {
69+
console.log("onAttrChangeAction");
70+
console.log(data);
71+
return {
72+
type: 'PUT_RESOURCE',
73+
resourceId: data.resourceId,
74+
attr: data.attr,
75+
remote: true
76+
};
5977
}

webapp/src/components/HostList.jsx

Lines changed: 0 additions & 38 deletions
This file was deleted.

webapp/src/components/Resource.jsx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,26 @@ import classNames from 'classnames';
22
import React from 'react';
33

44
import {Card, CardActions, CardHeader, CardMedia, CardTitle, CardText} from 'material-ui/Card';
5+
import Divider from 'material-ui/Divider';
6+
57
import FlatButton from 'material-ui/FlatButton';
68

79
import ResourceAttr from './ResourceAttr';
810

911
export default React.createClass({
12+
onAttrChange: function(attr) {
13+
this.props.onAttrChangeAction({
14+
resourceId: this.props.resource.id,
15+
attr
16+
});
17+
},
18+
1019
renderAttrs: function(attrs) {
1120
if(attrs) {
1221
return (
1322
<div>
14-
{attrs.map((attr, key) =>
15-
<ResourceAttr attr={attr} />
23+
{attrs.map((attr, key) =>
24+
<ResourceAttr attr={attr} onAttrChange={this.onAttrChange} />
1625
)}
1726
</div>
1827
);
@@ -23,12 +32,14 @@ export default React.createClass({
2332

2433
render: function() {
2534
const { resource } = this.props;
35+
console.log("Resource======");
36+
console.log(resource);
2637
const buttonStyle = {
2738
marginLeft: '10px'
2839
};
2940
return (
30-
<div className='col-md-4 col-sm-8'>
31-
<Card>
41+
<div className='col-md-4 col-sm-6'>
42+
<Card style={{marginBottom: '10px'}}>
3243
<CardTitle title={resource.uri} subtitle={resource.id} />
3344
<CardText>
3445
<div>

webapp/src/components/ResourceAttr.jsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import React from 'react';
2+
3+
import TextField from 'material-ui/TextField';
24
import Toggle from 'material-ui/Toggle';
35

6+
47
const styles = {
58
block: {
69
maxWidth: 250,
@@ -17,8 +20,10 @@ export default React.createClass({
1720
case "Integer":
1821
return (
1922
<div>
20-
<span>{attr.name}</span>
21-
<input type="number" value={attr.value}></input>
23+
<TextField
24+
value={attr.value}
25+
floatingLabelText={attr.name}>
26+
</TextField>
2227
</div>
2328
);
2429
case "Boolean":
@@ -27,17 +32,22 @@ export default React.createClass({
2732
toggled={attr.value}
2833
label={attr.name}
2934
style={styles.toggle}
35+
onClick={() => {
36+
attr.value = !attr.value;
37+
this.props.onAttrChange(attr);
38+
}}
3039
/>
3140
);
3241
default:
3342
return (
34-
<input type="text" value={attr.value}></input>
43+
<TextField value={attr.value}></TextField>
3544
);
3645
}
3746
},
3847

3948
render: function() {
4049
const { attr } = this.props;
50+
4151
return (
4252
<div>
4353
{this.renderAttrByType(attr)}

webapp/src/components/ResourceGraph.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export const ResourceGraph = React.createClass({
1515
name: 'series1',
1616
values: [ { x: 0, y: 20 }, { x: 1, y: 30 }, { x: 2, y: 10 }, { x: 3, y: 5 }, { x: 4, y: 8 }, { x: 5, y: 15 }, { x: 6, y: 10 } ],
1717
strokeWidth: 3,
18-
strokeDashArray: "5,5",
18+
strokeDashArray: "2,2",
1919
}
2020
];
2121

@@ -33,9 +33,9 @@ export const ResourceGraph = React.createClass({
3333
height: 400
3434
}}
3535
title="Line Chart"
36-
yAxisLabel="Altitude"
36+
yAxisLabel="Value"
3737
xAxisLabel="Elapsed Time (sec)"
38-
domain={{x: [,], y: [-10,]}}
38+
domain={{x: [resource.lineData[0].values.length - 10,resource.lineData[0].values.length], y: [,]}}
3939
gridHorizontal={true}
4040
/>
4141
</div>

webapp/src/components/ResourceList.jsx

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,52 @@ import { connect } from 'react-redux';
44

55
import Resource from './Resource';
66

7+
import * as actionsCreator from '../actions/resourceActions';
8+
79
export const ResourceList = React.createClass({
10+
renderResources: function(resources) {
11+
if(resources) {
12+
return (
13+
<div>
14+
{resources.map(res =>
15+
<Resource key={res.id} {...this.props} resource={res} />
16+
)}
17+
</div>
18+
)
19+
} else {
20+
return (
21+
<div>
22+
<h2><small>None resources available!</small></h2>
23+
</div>
24+
)
25+
}
26+
},
27+
828
render: function() {
929
const { resources } = this.props;
1030
return (
1131
<div>
12-
{resources.map(res =>
13-
<Resource key={res.id} {...this.props} resource={res} />
14-
)}
32+
<h1>Resources</h1>
33+
<button
34+
className="btn btn-info"
35+
onClick={() => this.props.discoverResources()}>
36+
Discover all
37+
</button>
38+
<div style={{marginTop: '10px'}} className="container">
39+
{ this.renderResources(resources) }
40+
</div>
1541
</div>
1642
);
1743
}
1844
});
1945

20-
export const ResourceListContainer = connect()(ResourceList);
46+
function mapStateToProps(state) {
47+
return {
48+
resources: state.get('resources').toJS()
49+
}
50+
}
51+
52+
export const ResourceListContainer = connect(
53+
mapStateToProps,
54+
actionsCreator
55+
)(ResourceList);

0 commit comments

Comments
 (0)