Update all new Tasks

This commit is contained in:
Ingy döt Net 2015-02-20 09:02:09 -05:00
parent 00a190b0a6
commit 91df62d461
5697 changed files with 93386 additions and 804 deletions

View file

@ -0,0 +1,88 @@
package main
import (
"golang.org/x/net/websocket"
"flag"
"fmt"
"html/template"
"io"
"math"
"net/http"
"time"
)
var (
Portnum string
Hostsite string
)
type PageSettings struct {
Host string
Port string
}
const (
Canvaswidth = 512
Canvasheight = 512
//color constants
HourColor = "#ff7373" // pinkish
MinuteColor = "#00b7e4" //light blue
SecondColor = "#b58900" //gold
)
func main() {
flag.StringVar(&Portnum, "Port", "1234", "Port to host server.")
flag.StringVar(&Hostsite, "Site", "localhost", "Site hosting server")
flag.Parse()
http.HandleFunc("/", webhandler)
http.Handle("/ws", websocket.Handler(wshandle))
err := http.ListenAndServe(Hostsite+":"+Portnum, nil)
if err != nil {
fmt.Println(err)
}
fmt.Println("server running")
}
func webhandler(w http.ResponseWriter, r *http.Request) {
wsurl := PageSettings{Host: Hostsite, Port: Portnum}
template, _ := template.ParseFiles("clock.html")
template.Execute(w, wsurl)
}
//Given a websocket connection,
//serves updating time function
func wshandle(ws *websocket.Conn) {
for {
hour, min, sec := time.Now().Clock()
hourx, houry := HourCords(hour, Canvasheight/2)
minx, miny := MinSecCords(min, Canvasheight/2)
secx, secy := MinSecCords(sec, Canvasheight/2)
msg := "CLEAR\n"
msg += fmt.Sprintf("HOUR %d %d %s\n", hourx, houry, HourColor)
msg += fmt.Sprintf("MIN %d %d %s\n", minx, miny, MinuteColor)
msg += fmt.Sprintf("SEC %d %d %s", secx, secy, SecondColor)
io.WriteString(ws, msg)
time.Sleep(time.Second / 60.0)
}
}
//Given current minute or second time(i.e 30 min, 60 minutes)
//and the radius, returns pair of cords to draw line to
func MinSecCords(ctime int, radius int) (int, int) {
//converts min/sec to angle and then to radians
theta := ((float64(ctime)*6 - 90) * (math.Pi / 180))
x := float64(radius) * math.Cos(theta)
y := float64(radius) * math.Sin(theta)
return int(x) + 256, int(y) + 256
}
//Given current hour time(i.e. 12, 8) and the radius,
//returns pair of cords to draw line to
func HourCords(ctime int, radius int) (int, int) {
//converts hours to angle and then to radians
theta := ((float64(ctime)*30 - 90) * (math.Pi / 180))
x := float64(radius) * math.Cos(theta)
y := float64(radius) * math.Sin(theta)
return int(x) + 256, int(y) + 256
}

View file

@ -0,0 +1,101 @@
<!DOCTYPE html>
<meta charset="utf-8" />
<title>Clock</title>
<script language="javascript" type="text/javascript">
var connurl = "ws://{{.Host}}:{{.Port}}/ws";
//var ctx;
var secondhand;
var minutehand;
var hourhand;
function wsConnect()
{
//get contexts for drawing
//var canvas = document.getElementById( "canvas" );
//ctx = canvas.getContext( '2d' );
var canvas = document.getElementById("rim");
//draw circle for rim
rim = canvas.getContext('2d');
rim.beginPath();
rim.arc(256,256,256,0,2*Math.PI);
rim.stroke();
//minute hand
canvas = document.getElementById("minutehand");
minutehand = canvas.getContext('2d');
//hour hand
canvas = document.getElementById("hourhand");
hourhand = canvas.getContext('2d');
//second hand
canvas = document.getElementById("secondhand");
secondhand = canvas.getContext('2d');
ws = new WebSocket( connurl );
ws.onopen = function( e ) {
console.log( "CONNECTED" );
ws.send( "READY" );
};
/*ws.onclose = function( e ) {
console.log( "DISCONNECTED" );
};*/
ws.onmessage = function( e ) {
var data = e.data.split("\n");
for ( var line in data ) {
var msg = data[line].split(" ");
var cmd = msg[0];
if (cmd =="CLEAR"){
minutehand.clearRect(0,0,512,512);
secondhand.clearRect(0,0,512,512);
hourhand.clearRect(0,0,512,512);
}else if (cmd === "HOUR"){
renderline(hourhand, msg);
}else if (cmd === "MIN"){
renderline(minutehand, msg);
}else if (cmd === "SEC"){
renderline(secondhand, msg);
}else if (cmd ===""){
cmd = "";
}else{
console.log("BAD COMMAND: "+cmd + "; "+msg);
}
}
};
ws.onerror = function( e ) {
console.log( 'WS Error: ' + e.data );
};
}
//render line given paramets
function renderline(ctx, msg){
ctx.clearRect(0,0,512,512);
ctx.width = ctx.width;
var x = parseInt(msg[1],10);
var y = parseInt(msg[2],10);
var color = msg[3];
ctx.strokeStyle = color;
ctx.beginPath();
ctx.moveTo(256,256);
ctx.lineTo(x,y);
ctx.stroke();
}
window.addEventListener( "load", wsConnect, false );
</script>
<body>
<h2>Clock</h2>
<canvas id="rim" width="512" height="512" style="position: absolute; left: 0; top: 0; z-index: 0;">
Sorry, your browser does not support Canvas
</canvas>
<canvas id="hourhand" width="512" height="512"style="position: absolute; left: 0; top: 0; z-index: 1;">
Sorry, your browser does not support Canvas
</canvas>
<canvas id="minutehand" width="512" height="512"style="position: absolute; left: 0; top: 0; z-index: 2;">
Sorry, your browser does not support Canvas
</canvas>
<canvas id="secondhand" width="512" height="512"style="position: absolute; left: 0; top: 0; z-index: 3;">
Sorry, your browser does not support Canvas
</canvas>
</body>
</html>