Skip to content

Commit

Permalink
advanced streaming
Browse files Browse the repository at this point in the history
  • Loading branch information
Leon committed Sep 2, 2013
1 parent ed2ea51 commit 0aaa5fb
Show file tree
Hide file tree
Showing 7 changed files with 185 additions and 31 deletions.
10 changes: 1 addition & 9 deletions ui/Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,4 @@ gem 'datamapper'
gem 'dm-redis-adapter'
gem 'mysql'
gem 'thin'
gem 'jammit'
gem 'guard'
gem 'guard-sass'
gem 'guard-process'
gem 'guard-jammit'
gem 'guard-changelog', "~> 0.1.0"
gem 'rb-inotify', :require => false
gem 'rb-fsevent', :require => false
gem 'rb-fchange', :require => false
gem 'json'
1 change: 1 addition & 0 deletions ui/gcc-4.2
23 changes: 23 additions & 0 deletions ui/public/js/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
function Event(data) {
this.time = ko.observable(data.time);
this.id = ko.observable(data.id);
}

function EventViewModel() {
var t = this;
var self = this;
t.events = ko.observableArray([]);
$.getJSON("/api/focus/event", function(raw) {
var events = $.map(raw, function(item) { return new Event(item) });
self.events(events);
console.log(events);
});
var es = new EventSource('/api/stream/event');
es.onmessage = function(e) {
var data = JSON.parse(e.data);
console.log(data);
t.events.push(data);
};
}
ko.applyBindings(new EventViewModel());

88 changes: 88 additions & 0 deletions ui/public/js/knockout.js

Large diffs are not rendered by default.

67 changes: 47 additions & 20 deletions ui/server.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,15 @@
# + now deleting a riders timeset after completion
################################################################################

require 'rubygems'
require 'erb' # view
require 'sinatra'# controller
require 'json'
require 'yaml'
require 'mysql'
require 'dm-core'
require 'dm-redis-adapter'
require 'dm-migrations'
require 'dm-serializer'

# setup
################################################################################
Expand Down Expand Up @@ -95,23 +96,28 @@ class Result
belongs_to :rider, :key => true
end

DataMapper.finalize
DataMapper.auto_upgrade!
configure do
DataMapper.finalize
DataMapper.auto_upgrade!

Rider.all.destroy
Node.all.destroy
Event.all.destroy
Result.all.destroy
Rider.all.destroy
Node.all.destroy
Event.all.destroy
Result.all.destroy

# sinatra setup
set :port, $config['server']['port']
set :bind, $config['server']['bind']
set :server, 'thin' # supports event-machine
# sinatra setup
set :port, $config['server']['port']
set :bind, $config['server']['bind']
set :server, 'thin' # supports event-machine
end

# variables for streaming
$connections_debug = [] # Debuglog
$connections_system = [] # System status
$connections_results = [] # pairs of trigger events
$connections_event = []

$messages = []

$race_id = 0

Expand Down Expand Up @@ -154,6 +160,20 @@ class Result
end
end

# focus api
get '/focus' do
erb :'focus/debug', :layout => false
end

before '/api/focus/*' do
content_type 'application/json'
end

get '/api/focus/event' do
@events = Event.all
@events.to_json
end

# API
post '/api/event' do
# extract the parameters out of the post
Expand Down Expand Up @@ -192,6 +212,7 @@ class Result
# stream it so that a riderId can be connected
node.events << event
node.save # prevent fuckup when accessing the last event
stream_event Event.last.to_json
stream_system "event;#{node.id}"
end
node.save
Expand Down Expand Up @@ -276,19 +297,18 @@ class Result
out.callback { $connections_system.delete(out) }
end
end
get '/api/stream/events', :provides => 'text/event-stream' do
stream :keep_open do |out|
$connectionsEvent << out
out.callback { $connectionsEvent.delete(out) }
end
end
get '/api/stream/results', :provides => 'text/event-stream' do
stream :keep_open do |out|
$connections_results << out
out.callback { $connections_results.delete(out) }
end
end

get '/api/stream/event', :provides => 'text/event-stream' do
stream :keep_open do |out|
$connections_event << out
out.callback { $connections_event.delete(out) }
end
end
# helpers
################################################################################

Expand All @@ -306,7 +326,10 @@ def stream_system(string)
$connections_system.each { |out| out <<
"data: #{string}\n\n"}
end

def stream_event(data)
$connections_event.each { |out| out <<
"data: #{data}\n\n"}
end
# time
def ts
Time.now.strftime('%H:%M:%S,%L')
Expand Down Expand Up @@ -336,7 +359,11 @@ def send_log(nodeID, nodeDelta, nodeDev)
$config['sql_log']['user'],
$config['sql_log']['pw'],
$config['sql_log']['db'])
con.query "INSERT INTO #{$config['sql_log']['table']} (#{$config['sql_log']['nodeID']},#{$config['sql_log']['nodeDelta']},#{$config['sql_log']['nodeDev']}) VALUES (#{nodeID},#{nodeDelta},#{nodeDev})"
con.query "INSERT INTO #{$config['sql_log']['table']} (#{$config['sql_log']['nodeID']},
#{$config['sql_log']['nodeDelta']},
#{$config['sql_log']['nodeDev']}) VALUES (#{nodeID},
#{nodeDelta},
#{nodeDev})"
rescue Mysql::Error => e
stream_debug "SQL log reply: #{e.errno}#{e.error}"
ensure
Expand Down
4 changes: 2 additions & 2 deletions ui/test/single.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
require 'uri'
require 'net/http'

$url = 'http:https://jack.l3kn.de'
#$url = 'http:https://localhost:42337'
#$url = 'http:https://jack.l3kn.de'
$url = 'http:https://localhost:42337'

def post(node,event,id)
ts = (Time.now.to_f*1000).floor
Expand Down
23 changes: 23 additions & 0 deletions ui/views/focus/debug.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Events</title>
</head>
<body>
<table>
<thead>
<tr><th>First name</th><th>Last name</th></tr>
</thead>
<tbody data-bind="foreach: events">
<tr>
<td data-bind="text: id"></td>
<td data-bind="text: time"></td>
</tr>
</tbody>
</table>
<script src="/js/jquery-2.0.0.min.js"></script>
<script src="/js/knockout.js"></script>
<script src="/js/app.js"></script>
</body>
</html>

0 comments on commit 0aaa5fb

Please sign in to comment.