Update all new Tasks
This commit is contained in:
parent
00a190b0a6
commit
91df62d461
5697 changed files with 93386 additions and 804 deletions
88
Task/Draw-a-clock/Go/draw-a-clock-1.go
Normal file
88
Task/Draw-a-clock/Go/draw-a-clock-1.go
Normal 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
|
||||
}
|
||||
101
Task/Draw-a-clock/Go/draw-a-clock-2.go
Normal file
101
Task/Draw-a-clock/Go/draw-a-clock-2.go
Normal 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>
|
||||
Loading…
Add table
Add a link
Reference in a new issue