Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
go-libp2p
Commits
d91b419e
Commit
d91b419e
authored
Dec 06, 2015
by
Jeromy
Browse files
WIP
parent
a40ef343
Changes
365
Hide whitespace changes
Inline
Side-by-side
Too many changes to show.
To preserve performance only
365 of 365+
files are displayed.
Plain diff
Email patch
vendor/gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket/examples/chat/main.go
deleted
100644 → 0
View file @
a40ef343
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
main
import
(
"flag"
"log"
"net/http"
"text/template"
)
var
addr
=
flag
.
String
(
"addr"
,
":8080"
,
"http service address"
)
var
homeTempl
=
template
.
Must
(
template
.
ParseFiles
(
"home.html"
))
func
serveHome
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
if
r
.
URL
.
Path
!=
"/"
{
http
.
Error
(
w
,
"Not found"
,
404
)
return
}
if
r
.
Method
!=
"GET"
{
http
.
Error
(
w
,
"Method not allowed"
,
405
)
return
}
w
.
Header
()
.
Set
(
"Content-Type"
,
"text/html; charset=utf-8"
)
homeTempl
.
Execute
(
w
,
r
.
Host
)
}
func
main
()
{
flag
.
Parse
()
go
h
.
run
()
http
.
HandleFunc
(
"/"
,
serveHome
)
http
.
HandleFunc
(
"/ws"
,
serveWs
)
err
:=
http
.
ListenAndServe
(
*
addr
,
nil
)
if
err
!=
nil
{
log
.
Fatal
(
"ListenAndServe: "
,
err
)
}
}
vendor/gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket/examples/command/README.md
deleted
100644 → 0
View file @
a40ef343
# Command example
This example connects a websocket connection to stdin and stdout of a command.
Received messages are written to stdin followed by a
`\n`
. Each line read from
from standard out is sent as a message to the client.
$ go get github.com/gorilla/websocket
$ cd `go list -f '{{.Dir}}' github.com/gorilla/websocket/examples/command`
$ go run main.go <command and arguments to run>
# Open http://localhost:8080/ .
Try the following commands.
# Echo sent messages to the output area.
$ go run main.go cat
# Run a shell.Try sending "ls" and "cat main.go".
$ go run main.go sh
vendor/gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket/examples/command/home.html
deleted
100644 → 0
View file @
a40ef343
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<title>
Command Example
</title>
<script
src=
"//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"
></script>
<script
type=
"text/javascript"
>
$
(
function
()
{
var
conn
;
var
msg
=
$
(
"
#msg
"
);
var
log
=
$
(
"
#log
"
);
function
appendLog
(
msg
)
{
var
d
=
log
[
0
]
var
doScroll
=
d
.
scrollTop
==
d
.
scrollHeight
-
d
.
clientHeight
;
msg
.
appendTo
(
log
)
if
(
doScroll
)
{
d
.
scrollTop
=
d
.
scrollHeight
-
d
.
clientHeight
;
}
}
$
(
"
#form
"
).
submit
(
function
()
{
if
(
!
conn
)
{
return
false
;
}
if
(
!
msg
.
val
())
{
return
false
;
}
conn
.
send
(
msg
.
val
());
msg
.
val
(
""
);
return
false
});
if
(
window
[
"
WebSocket
"
])
{
conn
=
new
WebSocket
(
"
ws://{{$}}/ws
"
);
conn
.
onclose
=
function
(
evt
)
{
appendLog
(
$
(
"
<div><b>Connection closed.</b></div>
"
))
}
conn
.
onmessage
=
function
(
evt
)
{
appendLog
(
$
(
"
<pre/>
"
).
text
(
evt
.
data
))
}
}
else
{
appendLog
(
$
(
"
<div><b>Your browser does not support WebSockets.</b></div>
"
))
}
});
</script>
<style
type=
"text/css"
>
html
{
overflow
:
hidden
;
}
body
{
overflow
:
hidden
;
padding
:
0
;
margin
:
0
;
width
:
100%
;
height
:
100%
;
background
:
gray
;
}
#log
{
background
:
white
;
margin
:
0
;
padding
:
0.5em
0.5em
0.5em
0.5em
;
position
:
absolute
;
top
:
0.5em
;
left
:
0.5em
;
right
:
0.5em
;
bottom
:
3em
;
overflow
:
auto
;
}
#log
pre
{
margin
:
0
;
}
#form
{
padding
:
0
0.5em
0
0.5em
;
margin
:
0
;
position
:
absolute
;
bottom
:
1em
;
left
:
0px
;
width
:
100%
;
overflow
:
hidden
;
}
</style>
</head>
<body>
<div
id=
"log"
></div>
<form
id=
"form"
>
<input
type=
"submit"
value=
"Send"
/>
<input
type=
"text"
id=
"msg"
size=
"64"
/>
</form>
</body>
</html>
vendor/gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket/examples/command/main.go
deleted
100644 → 0
View file @
a40ef343
// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
main
import
(
"bufio"
"flag"
"io"
"log"
"net/http"
"os"
"os/exec"
"text/template"
"time"
"gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket"
)
var
(
addr
=
flag
.
String
(
"addr"
,
"127.0.0.1:8080"
,
"http service address"
)
cmdPath
string
homeTempl
=
template
.
Must
(
template
.
ParseFiles
(
"home.html"
))
)
const
(
// Time allowed to write a message to the peer.
writeWait
=
10
*
time
.
Second
// Maximum message size allowed from peer.
maxMessageSize
=
8192
// Time allowed to read the next pong message from the peer.
pongWait
=
60
*
time
.
Second
// Send pings to peer with this period. Must be less than pongWait.
pingPeriod
=
(
pongWait
*
9
)
/
10
)
func
pumpStdin
(
ws
*
websocket
.
Conn
,
w
io
.
Writer
)
{
defer
ws
.
Close
()
ws
.
SetReadLimit
(
maxMessageSize
)
ws
.
SetReadDeadline
(
time
.
Now
()
.
Add
(
pongWait
))
ws
.
SetPongHandler
(
func
(
string
)
error
{
ws
.
SetReadDeadline
(
time
.
Now
()
.
Add
(
pongWait
));
return
nil
})
for
{
_
,
message
,
err
:=
ws
.
ReadMessage
()
if
err
!=
nil
{
break
}
message
=
append
(
message
,
'\n'
)
if
_
,
err
:=
w
.
Write
(
message
);
err
!=
nil
{
break
}
}
}
func
pumpStdout
(
ws
*
websocket
.
Conn
,
r
io
.
Reader
,
done
chan
struct
{})
{
defer
func
()
{
ws
.
Close
()
close
(
done
)
}()
s
:=
bufio
.
NewScanner
(
r
)
for
s
.
Scan
()
{
ws
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
writeWait
))
if
err
:=
ws
.
WriteMessage
(
websocket
.
TextMessage
,
s
.
Bytes
());
err
!=
nil
{
break
}
}
if
s
.
Err
()
!=
nil
{
log
.
Println
(
"scan:"
,
s
.
Err
())
}
}
func
ping
(
ws
*
websocket
.
Conn
,
done
chan
struct
{})
{
ticker
:=
time
.
NewTicker
(
pingPeriod
)
defer
ticker
.
Stop
()
for
{
select
{
case
<-
ticker
.
C
:
if
err
:=
ws
.
WriteControl
(
websocket
.
PingMessage
,
[]
byte
{},
time
.
Now
()
.
Add
(
writeWait
));
err
!=
nil
{
log
.
Println
(
"ping:"
,
err
)
}
case
<-
done
:
return
}
}
}
func
internalError
(
ws
*
websocket
.
Conn
,
msg
string
,
err
error
)
{
log
.
Println
(
msg
,
err
)
ws
.
WriteMessage
(
websocket
.
TextMessage
,
[]
byte
(
"Internal server error."
))
}
var
upgrader
=
websocket
.
Upgrader
{}
func
serveWs
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
ws
,
err
:=
upgrader
.
Upgrade
(
w
,
r
,
nil
)
if
err
!=
nil
{
log
.
Println
(
"upgrade:"
,
err
)
return
}
defer
ws
.
Close
()
outr
,
outw
,
err
:=
os
.
Pipe
()
if
err
!=
nil
{
internalError
(
ws
,
"stdout:"
,
err
)
return
}
defer
outr
.
Close
()
defer
outw
.
Close
()
inr
,
inw
,
err
:=
os
.
Pipe
()
if
err
!=
nil
{
internalError
(
ws
,
"stdin:"
,
err
)
return
}
defer
inr
.
Close
()
defer
inw
.
Close
()
proc
,
err
:=
os
.
StartProcess
(
cmdPath
,
flag
.
Args
(),
&
os
.
ProcAttr
{
Files
:
[]
*
os
.
File
{
inr
,
outw
,
outw
},
})
if
err
!=
nil
{
internalError
(
ws
,
"start:"
,
err
)
return
}
inr
.
Close
()
outw
.
Close
()
stdoutDone
:=
make
(
chan
struct
{})
go
pumpStdout
(
ws
,
outr
,
stdoutDone
)
go
ping
(
ws
,
stdoutDone
)
pumpStdin
(
ws
,
inw
)
// Some commands will exit when stdin is closed.
inw
.
Close
()
// Other commands need a bonk on the head.
if
err
:=
proc
.
Signal
(
os
.
Interrupt
);
err
!=
nil
{
log
.
Println
(
"inter:"
,
err
)
}
select
{
case
<-
stdoutDone
:
case
<-
time
.
After
(
time
.
Second
)
:
// A bigger bonk on the head.
if
err
:=
proc
.
Signal
(
os
.
Kill
);
err
!=
nil
{
log
.
Println
(
"term:"
,
err
)
}
<-
stdoutDone
}
if
_
,
err
:=
proc
.
Wait
();
err
!=
nil
{
log
.
Println
(
"wait:"
,
err
)
}
}
func
serveHome
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
if
r
.
URL
.
Path
!=
"/"
{
http
.
Error
(
w
,
"Not found"
,
404
)
return
}
if
r
.
Method
!=
"GET"
{
http
.
Error
(
w
,
"Method not allowed"
,
405
)
return
}
w
.
Header
()
.
Set
(
"Content-Type"
,
"text/html; charset=utf-8"
)
homeTempl
.
Execute
(
w
,
r
.
Host
)
}
func
main
()
{
flag
.
Parse
()
if
len
(
flag
.
Args
())
<
1
{
log
.
Fatal
(
"must specify at least one argument"
)
}
var
err
error
cmdPath
,
err
=
exec
.
LookPath
(
flag
.
Args
()[
0
])
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
http
.
HandleFunc
(
"/"
,
serveHome
)
http
.
HandleFunc
(
"/ws"
,
serveWs
)
log
.
Fatal
(
http
.
ListenAndServe
(
*
addr
,
nil
))
}
vendor/gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket/examples/echo/README.md
deleted
100644 → 0
View file @
a40ef343
# Client and server example
This example shows a simple client and server.
The server echoes messages sent to it. The client sends a message every second
and prints all messages received.
To run the example, start the server:
$ go run server.go
Next, start the client:
$ go run client.go
The server includes a simple web client. To use the client, open
http://127.0.0.1:8080 in the browser and follow the instructions on the page.
vendor/gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket/examples/echo/client.go
deleted
100644 → 0
View file @
a40ef343
// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build ignore
package
main
import
(
"flag"
"log"
"net/url"
"time"
"github.com/gorilla/websocket"
)
var
addr
=
flag
.
String
(
"addr"
,
"localhost:8080"
,
"http service address"
)
func
main
()
{
flag
.
Parse
()
log
.
SetFlags
(
0
)
u
:=
url
.
URL
{
Scheme
:
"ws"
,
Host
:
*
addr
,
Path
:
"/echo"
}
log
.
Printf
(
"connecting to %s"
,
u
.
String
())
c
,
_
,
err
:=
websocket
.
DefaultDialer
.
Dial
(
u
.
String
(),
nil
)
if
err
!=
nil
{
log
.
Fatal
(
"dial:"
,
err
)
}
defer
c
.
Close
()
go
func
()
{
defer
c
.
Close
()
for
{
_
,
message
,
err
:=
c
.
ReadMessage
()
if
err
!=
nil
{
log
.
Println
(
"read:"
,
err
)
break
}
log
.
Printf
(
"recv: %s"
,
message
)
}
}()
ticker
:=
time
.
NewTicker
(
time
.
Second
)
defer
ticker
.
Stop
()
for
t
:=
range
ticker
.
C
{
err
:=
c
.
WriteMessage
(
websocket
.
TextMessage
,
[]
byte
(
t
.
String
()))
if
err
!=
nil
{
log
.
Println
(
"write:"
,
err
)
break
}
}
}
vendor/gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket/examples/echo/server.go
deleted
100644 → 0
View file @
a40ef343
// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build ignore
package
main
import
(
"flag"
"html/template"
"log"
"net/http"
"github.com/gorilla/websocket"
)
var
addr
=
flag
.
String
(
"addr"
,
"localhost:8080"
,
"http service address"
)
var
upgrader
=
websocket
.
Upgrader
{}
// use default options
func
echo
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
c
,
err
:=
upgrader
.
Upgrade
(
w
,
r
,
nil
)
if
err
!=
nil
{
log
.
Print
(
"upgrade:"
,
err
)
return
}
defer
c
.
Close
()
for
{
mt
,
message
,
err
:=
c
.
ReadMessage
()
if
err
!=
nil
{
log
.
Println
(
"read:"
,
err
)
break
}
log
.
Printf
(
"recv: %s"
,
message
)
err
=
c
.
WriteMessage
(
mt
,
message
)
if
err
!=
nil
{
log
.
Println
(
"write:"
,
err
)
break
}
}
}
func
home
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
homeTemplate
.
Execute
(
w
,
"ws://"
+
r
.
Host
+
"/echo"
)
}
func
main
()
{
flag
.
Parse
()
log
.
SetFlags
(
0
)
http
.
HandleFunc
(
"/echo"
,
echo
)
http
.
HandleFunc
(
"/"
,
home
)
log
.
Fatal
(
http
.
ListenAndServe
(
*
addr
,
nil
))
}
var
homeTemplate
=
template
.
Must
(
template
.
New
(
""
)
.
Parse
(
`
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script>
window.addEventListener("load", function(evt) {
var output = document.getElementById("output");
var input = document.getElementById("input");
var ws;
var print = function(message) {
var d = document.createElement("div");
d.innerHTML = message;
output.appendChild(d);
};
document.getElementById("open").onclick = function(evt) {
if (ws) {
return false;
}
ws = new WebSocket("{{.}}");
ws.onopen = function(evt) {
print("OPEN");
}
ws.onclose = function(evt) {
print("CLOSE");
ws = null;
}
ws.onmessage = function(evt) {
print("RESPONSE: " + evt.data);
}
ws.onerror = function(evt) {
print("ERROR: " + evt.data);
}
return false;
};
document.getElementById("send").onclick = function(evt) {
if (!ws) {
return false;
}
print("SEND: " + input.value);
ws.send(input.value);
return false;
};
document.getElementById("close").onclick = function(evt) {
if (!ws) {
return false;
}
ws.close();
return false;
};
});
</script>
</head>
<body>
<table>
<tr><td valign="top" width="50%">
<p>Click "Open" to create a connection to the server,
"Send" to send a message to the server and "Close" to close the connection.
You can change the message and send multiple times.
<p>
<form>
<button id="open">Open</button>
<button id="close">Close</button>
<p><input id="input" type="text" value="Hello world!">
<button id="send">Send</button>
</form>
</td><td valign="top" width="50%">
<div id="output"></div>
</td></tr></table>
</body>
</html>
`
))
vendor/gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket/examples/filewatch/README.md
deleted
100644 → 0
View file @
a40ef343
# File Watch example.
This example sends a file to the browser client for display whenever the file is modified.
$ go get github.com/gorilla/websocket
$ cd `go list -f '{{.Dir}}' github.com/gorilla/websocket/examples/filewatch`
$ go run main.go <name of file to watch>
# Open http://localhost:8080/ .
# Modify the file to see it update in the browser.
vendor/gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket/examples/filewatch/main.go
deleted
100644 → 0
View file @
a40ef343
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
main
import
(
"flag"
"io/ioutil"
"log"
"net/http"
"os"
"strconv"
"text/template"
"time"
"gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket"
)
const
(
// Time allowed to write the file to the client.
writeWait
=
10
*
time
.
Second
// Time allowed to read the next pong message from the client.
pongWait
=
60
*
time
.
Second
// Send pings to client with this period. Must be less than pongWait.
pingPeriod
=
(
pongWait
*
9
)
/
10
// Poll file for changes with this period.
filePeriod
=
10
*
time
.
Second
)
var
(
addr
=
flag
.
String
(
"addr"
,
":8080"
,
"http service address"
)
homeTempl
=
template
.
Must
(
template
.
New
(
""
)
.
Parse
(
homeHTML
))
filename
string
upgrader
=
websocket
.
Upgrader
{
ReadBufferSize
:
1024
,
WriteBufferSize
:
1024
,
}
)
func
readFileIfModified
(
lastMod
time
.
Time
)
([]
byte
,
time
.
Time
,
error
)
{
fi
,
err
:=
os
.
Stat
(
filename
)
if
err
!=
nil
{
return
nil
,
lastMod
,
err
}
if
!
fi
.
ModTime
()
.
After
(
lastMod
)
{
return
nil
,
lastMod
,
nil
}
p
,
err
:=
ioutil
.
ReadFile
(
filename
)
if
err
!=
nil
{
return
nil
,
fi
.
ModTime
(),
err
}
return
p
,
fi
.
ModTime
(),
nil
}
func
reader
(
ws
*
websocket
.
Conn
)
{
defer
ws
.
Close
()
ws
.
SetReadLimit
(
512
)
ws
.
SetReadDeadline
(
time
.
Now
()
.
Add
(
pongWait
))
ws
.
SetPongHandler
(
func
(
string
)
error
{
ws
.
SetReadDeadline
(
time
.
Now
()
.
Add
(
pongWait
));
return
nil
})
for
{
_
,
_
,
err
:=
ws
.
ReadMessage
()
if
err
!=
nil
{
break
}
}
}
func
writer
(
ws
*
websocket
.
Conn
,
lastMod
time
.
Time
)
{
lastError
:=
""
pingTicker
:=
time
.
NewTicker
(
pingPeriod
)
fileTicker
:=
time
.
NewTicker
(
filePeriod
)
defer
func
()
{
pingTicker
.
Stop
()
fileTicker
.
Stop
()
ws
.
Close
()
}()
for
{
select
{
case
<-
fileTicker
.
C
:
var
p
[]
byte
var
err
error
p
,
lastMod
,
err
=
readFileIfModified
(
lastMod
)
if
err
!=
nil
{
if
s
:=
err
.
Error
();
s
!=
lastError
{
lastError
=
s
p
=
[]
byte
(
lastError
)
}
}
else
{
lastError
=
""
}
if
p
!=
nil
{
ws
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
writeWait
))
if
err
:=
ws
.
WriteMessage
(
websocket
.
TextMessage
,
p
);
err
!=
nil
{
return
}
}
case
<-
pingTicker
.
C
:
ws
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
writeWait
))
if
err
:=
ws
.
WriteMessage
(
websocket
.
PingMessage
,
[]
byte
{});
err
!=
nil
{
return
}
}
}
}
func
serveWs
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
ws
,
err
:=
upgrader
.
Upgrade
(
w
,
r
,
nil
)
if
err
!=
nil
{
if
_
,
ok
:=
err
.
(
websocket
.
HandshakeError
);
!
ok
{
log
.
Println
(
err
)
}
return
}
var
lastMod
time
.
Time
if
n
,
err
:=
strconv
.
ParseInt
(
r
.
FormValue
(
"lastMod"
),
16
,
64
);
err
!=
nil
{
lastMod
=
time
.
Unix
(
0
,
n
)
}
go
writer
(
ws
,
lastMod
)
reader
(
ws
)
}
func
serveHome
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
if
r
.
URL
.
Path
!=
"/"
{
http
.
Error
(
w
,
"Not found"
,
404
)
return
}
if
r
.
Method
!=
"GET"
{
http
.
Error
(
w
,
"Method not allowed"
,
405
)
return
}
w
.
Header
()
.
Set
(
"Content-Type"
,
"text/html; charset=utf-8"
)
p
,
lastMod
,
err
:=
readFileIfModified
(
time
.
Time
{})
if
err
!=
nil
{
p
=
[]
byte
(
err
.
Error
())
lastMod
=
time
.
Unix
(
0
,
0
)
}
var
v
=
struct
{
Host
string
Data
string
LastMod
string
}{
r
.
Host
,
string
(
p
),
strconv
.
FormatInt
(
lastMod
.
UnixNano
(),
16
),
}
homeTempl
.
Execute
(
w
,
&
v
)
}
func
main
()
{
flag
.
Parse
()
if
flag
.
NArg
()
!=
1
{
log
.
Fatal
(
"filename not specified"
)
}
filename
=
flag
.
Args
()[
0
]
http
.
HandleFunc
(
"/"
,
serveHome
)
http
.
HandleFunc
(
"/ws"
,
serveWs
)
if
err
:=
http
.
ListenAndServe
(
*
addr
,
nil
);
err
!=
nil
{
log
.
Fatal
(
err
)
}
}
const
homeHTML
=
`<!DOCTYPE html>
<html lang="en">
<head>
<title>WebSocket Example</title>
</head>
<body>
<pre id="fileData">{{.Data}}</pre>
<script type="text/javascript">
(function() {
var data = document.getElementById("fileData");
var conn = new WebSocket("ws://{{.Host}}/ws?lastMod={{.LastMod}}");
conn.onclose = function(evt) {
data.textContent = 'Connection closed';
}
conn.onmessage = function(evt) {
console.log('file updated');
data.textContent = evt.data;
}
})();
</script>
</body>
</html>
`
vendor/gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket/json.go
deleted
100644 → 0
View file @
a40ef343
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
websocket
import
(
"encoding/json"
"io"
)
// WriteJSON is deprecated, use c.WriteJSON instead.
func
WriteJSON
(
c
*
Conn
,
v
interface
{})
error
{
return
c
.
WriteJSON
(
v
)
}
// WriteJSON writes the JSON encoding of v to the connection.
//
// See the documentation for encoding/json Marshal for details about the
// conversion of Go values to JSON.
func
(
c
*
Conn
)
WriteJSON
(
v
interface
{})
error
{
w
,
err
:=
c
.
NextWriter
(
TextMessage
)
if
err
!=
nil
{
return
err
}
err1
:=
json
.
NewEncoder
(
w
)
.
Encode
(
v
)
err2
:=
w
.
Close
()
if
err1
!=
nil
{
return
err1
}
return
err2
}
// ReadJSON is deprecated, use c.ReadJSON instead.
func
ReadJSON
(
c
*
Conn
,
v
interface
{})
error
{
return
c
.
ReadJSON
(
v
)
}
// ReadJSON reads the next JSON-encoded message from the connection and stores
// it in the value pointed to by v.
//
// See the documentation for the encoding/json Unmarshal function for details
// about the conversion of JSON to a Go value.
func
(
c
*
Conn
)
ReadJSON
(
v
interface
{})
error
{
_
,
r
,
err
:=
c
.
NextReader
()
if
err
!=
nil
{
return
err
}
err
=
json
.
NewDecoder
(
r
)
.
Decode
(
v
)
if
err
==
io
.
EOF
{
// One value is expected in the message.
err
=
io
.
ErrUnexpectedEOF
}
return
err
}
vendor/gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket/json_test.go
deleted
100644 → 0
View file @
a40ef343
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
websocket
import
(
"bytes"
"encoding/json"
"io"
"reflect"
"testing"
)
func
TestJSON
(
t
*
testing
.
T
)
{
var
buf
bytes
.
Buffer
c
:=
fakeNetConn
{
&
buf
,
&
buf
}
wc
:=
newConn
(
c
,
true
,
1024
,
1024
)
rc
:=
newConn
(
c
,
false
,
1024
,
1024
)
var
actual
,
expect
struct
{
A
int
B
string
}
expect
.
A
=
1
expect
.
B
=
"hello"
if
err
:=
wc
.
WriteJSON
(
&
expect
);
err
!=
nil
{
t
.
Fatal
(
"write"
,
err
)
}
if
err
:=
rc
.
ReadJSON
(
&
actual
);
err
!=
nil
{
t
.
Fatal
(
"read"
,
err
)
}
if
!
reflect
.
DeepEqual
(
&
actual
,
&
expect
)
{
t
.
Fatal
(
"equal"
,
actual
,
expect
)
}
}
func
TestPartialJSONRead
(
t
*
testing
.
T
)
{
var
buf
bytes
.
Buffer
c
:=
fakeNetConn
{
&
buf
,
&
buf
}
wc
:=
newConn
(
c
,
true
,
1024
,
1024
)
rc
:=
newConn
(
c
,
false
,
1024
,
1024
)
var
v
struct
{
A
int
B
string
}
v
.
A
=
1
v
.
B
=
"hello"
messageCount
:=
0
// Partial JSON values.
data
,
err
:=
json
.
Marshal
(
v
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
for
i
:=
len
(
data
)
-
1
;
i
>=
0
;
i
--
{
if
err
:=
wc
.
WriteMessage
(
TextMessage
,
data
[
:
i
]);
err
!=
nil
{
t
.
Fatal
(
err
)
}
messageCount
++
}
// Whitespace.
if
err
:=
wc
.
WriteMessage
(
TextMessage
,
[]
byte
(
" "
));
err
!=
nil
{
t
.
Fatal
(
err
)
}
messageCount
++
// Close.
if
err
:=
wc
.
WriteMessage
(
CloseMessage
,
FormatCloseMessage
(
CloseNormalClosure
,
""
));
err
!=
nil
{
t
.
Fatal
(
err
)
}
for
i
:=
0
;
i
<
messageCount
;
i
++
{
err
:=
rc
.
ReadJSON
(
&
v
)
if
err
!=
io
.
ErrUnexpectedEOF
{
t
.
Error
(
"read"
,
i
,
err
)
}
}
err
=
rc
.
ReadJSON
(
&
v
)
if
_
,
ok
:=
err
.
(
*
CloseError
);
!
ok
{
t
.
Error
(
"final"
,
err
)
}
}
func
TestDeprecatedJSON
(
t
*
testing
.
T
)
{
var
buf
bytes
.
Buffer
c
:=
fakeNetConn
{
&
buf
,
&
buf
}
wc
:=
newConn
(
c
,
true
,
1024
,
1024
)
rc
:=
newConn
(
c
,
false
,
1024
,
1024
)
var
actual
,
expect
struct
{
A
int
B
string
}
expect
.
A
=
1
expect
.
B
=
"hello"
if
err
:=
WriteJSON
(
wc
,
&
expect
);
err
!=
nil
{
t
.
Fatal
(
"write"
,
err
)
}
if
err
:=
ReadJSON
(
rc
,
&
actual
);
err
!=
nil
{
t
.
Fatal
(
"read"
,
err
)
}
if
!
reflect
.
DeepEqual
(
&
actual
,
&
expect
)
{
t
.
Fatal
(
"equal"
,
actual
,
expect
)
}
}
vendor/gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket/package.json
deleted
100644 → 0
View file @
a40ef343
{
"name"
:
"websocket"
,
"author"
:
"whyrusleeping"
,
"version"
:
"1.0.0"
,
"language"
:
"go"
,
"gx"
:
{
"dvcsimport"
:
"github.com/gorilla/websocket"
}
}
\ No newline at end of file
vendor/gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket/server.go
deleted
100644 → 0
View file @
a40ef343
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
websocket
import
(
"bufio"
"errors"
"net"
"net/http"
"net/url"
"strings"
"time"
)
// HandshakeError describes an error with the handshake from the peer.
type
HandshakeError
struct
{
message
string
}
func
(
e
HandshakeError
)
Error
()
string
{
return
e
.
message
}
// Upgrader specifies parameters for upgrading an HTTP connection to a
// WebSocket connection.
type
Upgrader
struct
{
// HandshakeTimeout specifies the duration for the handshake to complete.
HandshakeTimeout
time
.
Duration
// ReadBufferSize and WriteBufferSize specify I/O buffer sizes. If a buffer
// size is zero, then a default value of 4096 is used. The I/O buffer sizes
// do not limit the size of the messages that can be sent or received.
ReadBufferSize
,
WriteBufferSize
int
// Subprotocols specifies the server's supported protocols in order of
// preference. If this field is set, then the Upgrade method negotiates a
// subprotocol by selecting the first match in this list with a protocol
// requested by the client.
Subprotocols
[]
string
// Error specifies the function for generating HTTP error responses. If Error
// is nil, then http.Error is used to generate the HTTP response.
Error
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
status
int
,
reason
error
)
// CheckOrigin returns true if the request Origin header is acceptable. If
// CheckOrigin is nil, the host in the Origin header must not be set or
// must match the host of the request.
CheckOrigin
func
(
r
*
http
.
Request
)
bool
}
func
(
u
*
Upgrader
)
returnError
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
status
int
,
reason
string
)
(
*
Conn
,
error
)
{
err
:=
HandshakeError
{
reason
}
if
u
.
Error
!=
nil
{
u
.
Error
(
w
,
r
,
status
,
err
)
}
else
{
http
.
Error
(
w
,
http
.
StatusText
(
status
),
status
)
}
return
nil
,
err
}
// checkSameOrigin returns true if the origin is not set or is equal to the request host.
func
checkSameOrigin
(
r
*
http
.
Request
)
bool
{
origin
:=
r
.
Header
[
"Origin"
]
if
len
(
origin
)
==
0
{
return
true
}
u
,
err
:=
url
.
Parse
(
origin
[
0
])
if
err
!=
nil
{
return
false
}
return
u
.
Host
==
r
.
Host
}
func
(
u
*
Upgrader
)
selectSubprotocol
(
r
*
http
.
Request
,
responseHeader
http
.
Header
)
string
{
if
u
.
Subprotocols
!=
nil
{
clientProtocols
:=
Subprotocols
(
r
)
for
_
,
serverProtocol
:=
range
u
.
Subprotocols
{
for
_
,
clientProtocol
:=
range
clientProtocols
{
if
clientProtocol
==
serverProtocol
{
return
clientProtocol
}
}
}
}
else
if
responseHeader
!=
nil
{
return
responseHeader
.
Get
(
"Sec-Websocket-Protocol"
)
}
return
""
}
// Upgrade upgrades the HTTP server connection to the WebSocket protocol.
//
// The responseHeader is included in the response to the client's upgrade
// request. Use the responseHeader to specify cookies (Set-Cookie) and the
// application negotiated subprotocol (Sec-Websocket-Protocol).
func
(
u
*
Upgrader
)
Upgrade
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
responseHeader
http
.
Header
)
(
*
Conn
,
error
)
{
if
r
.
Method
!=
"GET"
{
return
u
.
returnError
(
w
,
r
,
http
.
StatusMethodNotAllowed
,
"websocket: method not GET"
)
}
if
values
:=
r
.
Header
[
"Sec-Websocket-Version"
];
len
(
values
)
==
0
||
values
[
0
]
!=
"13"
{
return
u
.
returnError
(
w
,
r
,
http
.
StatusBadRequest
,
"websocket: version != 13"
)
}
if
!
tokenListContainsValue
(
r
.
Header
,
"Connection"
,
"upgrade"
)
{
return
u
.
returnError
(
w
,
r
,
http
.
StatusBadRequest
,
"websocket: could not find connection header with token 'upgrade'"
)
}
if
!
tokenListContainsValue
(
r
.
Header
,
"Upgrade"
,
"websocket"
)
{
return
u
.
returnError
(
w
,
r
,
http
.
StatusBadRequest
,
"websocket: could not find upgrade header with token 'websocket'"
)
}
checkOrigin
:=
u
.
CheckOrigin
if
checkOrigin
==
nil
{
checkOrigin
=
checkSameOrigin
}
if
!
checkOrigin
(
r
)
{
return
u
.
returnError
(
w
,
r
,
http
.
StatusForbidden
,
"websocket: origin not allowed"
)
}
challengeKey
:=
r
.
Header
.
Get
(
"Sec-Websocket-Key"
)
if
challengeKey
==
""
{
return
u
.
returnError
(
w
,
r
,
http
.
StatusBadRequest
,
"websocket: key missing or blank"
)
}
subprotocol
:=
u
.
selectSubprotocol
(
r
,
responseHeader
)
var
(
netConn
net
.
Conn
br
*
bufio
.
Reader
err
error
)
h
,
ok
:=
w
.
(
http
.
Hijacker
)
if
!
ok
{
return
u
.
returnError
(
w
,
r
,
http
.
StatusInternalServerError
,
"websocket: response does not implement http.Hijacker"
)
}
var
rw
*
bufio
.
ReadWriter
netConn
,
rw
,
err
=
h
.
Hijack
()
if
err
!=
nil
{
return
u
.
returnError
(
w
,
r
,
http
.
StatusInternalServerError
,
err
.
Error
())
}
br
=
rw
.
Reader
if
br
.
Buffered
()
>
0
{
netConn
.
Close
()
return
nil
,
errors
.
New
(
"websocket: client sent data before handshake is complete"
)
}
c
:=
newConn
(
netConn
,
true
,
u
.
ReadBufferSize
,
u
.
WriteBufferSize
)
c
.
subprotocol
=
subprotocol
p
:=
c
.
writeBuf
[
:
0
]
p
=
append
(
p
,
"HTTP/1.1 101 Switching Protocols
\r\n
Upgrade: websocket
\r\n
Connection: Upgrade
\r\n
Sec-WebSocket-Accept: "
...
)
p
=
append
(
p
,
computeAcceptKey
(
challengeKey
)
...
)
p
=
append
(
p
,
"
\r\n
"
...
)
if
c
.
subprotocol
!=
""
{
p
=
append
(
p
,
"Sec-Websocket-Protocol: "
...
)
p
=
append
(
p
,
c
.
subprotocol
...
)
p
=
append
(
p
,
"
\r\n
"
...
)
}
for
k
,
vs
:=
range
responseHeader
{
if
k
==
"Sec-Websocket-Protocol"
{
continue
}
for
_
,
v
:=
range
vs
{
p
=
append
(
p
,
k
...
)
p
=
append
(
p
,
": "
...
)
for
i
:=
0
;
i
<
len
(
v
);
i
++
{
b
:=
v
[
i
]
if
b
<=
31
{
// prevent response splitting.
b
=
' '
}
p
=
append
(
p
,
b
)
}
p
=
append
(
p
,
"
\r\n
"
...
)
}
}
p
=
append
(
p
,
"
\r\n
"
...
)
// Clear deadlines set by HTTP server.
netConn
.
SetDeadline
(
time
.
Time
{})
if
u
.
HandshakeTimeout
>
0
{
netConn
.
SetWriteDeadline
(
time
.
Now
()
.
Add
(
u
.
HandshakeTimeout
))
}
if
_
,
err
=
netConn
.
Write
(
p
);
err
!=
nil
{
netConn
.
Close
()
return
nil
,
err
}
if
u
.
HandshakeTimeout
>
0
{
netConn
.
SetWriteDeadline
(
time
.
Time
{})
}
return
c
,
nil
}
// Upgrade upgrades the HTTP server connection to the WebSocket protocol.
//
// This function is deprecated, use websocket.Upgrader instead.
//
// The application is responsible for checking the request origin before
// calling Upgrade. An example implementation of the same origin policy is:
//
// if req.Header.Get("Origin") != "http://"+req.Host {
// http.Error(w, "Origin not allowed", 403)
// return
// }
//
// If the endpoint supports subprotocols, then the application is responsible
// for negotiating the protocol used on the connection. Use the Subprotocols()
// function to get the subprotocols requested by the client. Use the
// Sec-Websocket-Protocol response header to specify the subprotocol selected
// by the application.
//
// The responseHeader is included in the response to the client's upgrade
// request. Use the responseHeader to specify cookies (Set-Cookie) and the
// negotiated subprotocol (Sec-Websocket-Protocol).
//
// The connection buffers IO to the underlying network connection. The
// readBufSize and writeBufSize parameters specify the size of the buffers to
// use. Messages can be larger than the buffers.
//
// If the request is not a valid WebSocket handshake, then Upgrade returns an
// error of type HandshakeError. Applications should handle this error by
// replying to the client with an HTTP error response.
func
Upgrade
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
responseHeader
http
.
Header
,
readBufSize
,
writeBufSize
int
)
(
*
Conn
,
error
)
{
u
:=
Upgrader
{
ReadBufferSize
:
readBufSize
,
WriteBufferSize
:
writeBufSize
}
u
.
Error
=
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
status
int
,
reason
error
)
{
// don't return errors to maintain backwards compatibility
}
u
.
CheckOrigin
=
func
(
r
*
http
.
Request
)
bool
{
// allow all connections by default
return
true
}
return
u
.
Upgrade
(
w
,
r
,
responseHeader
)
}
// Subprotocols returns the subprotocols requested by the client in the
// Sec-Websocket-Protocol header.
func
Subprotocols
(
r
*
http
.
Request
)
[]
string
{
h
:=
strings
.
TrimSpace
(
r
.
Header
.
Get
(
"Sec-Websocket-Protocol"
))
if
h
==
""
{
return
nil
}
protocols
:=
strings
.
Split
(
h
,
","
)
for
i
:=
range
protocols
{
protocols
[
i
]
=
strings
.
TrimSpace
(
protocols
[
i
])
}
return
protocols
}
vendor/gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket/server_test.go
deleted
100644 → 0
View file @
a40ef343
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
websocket
import
(
"net/http"
"reflect"
"testing"
)
var
subprotocolTests
=
[]
struct
{
h
string
protocols
[]
string
}{
{
""
,
nil
},
{
"foo"
,
[]
string
{
"foo"
}},
{
"foo,bar"
,
[]
string
{
"foo"
,
"bar"
}},
{
"foo, bar"
,
[]
string
{
"foo"
,
"bar"
}},
{
" foo, bar"
,
[]
string
{
"foo"
,
"bar"
}},
{
" foo, bar "
,
[]
string
{
"foo"
,
"bar"
}},
}
func
TestSubprotocols
(
t
*
testing
.
T
)
{
for
_
,
st
:=
range
subprotocolTests
{
r
:=
http
.
Request
{
Header
:
http
.
Header
{
"Sec-Websocket-Protocol"
:
{
st
.
h
}}}
protocols
:=
Subprotocols
(
&
r
)
if
!
reflect
.
DeepEqual
(
st
.
protocols
,
protocols
)
{
t
.
Errorf
(
"SubProtocols(%q) returned %#v, want %#v"
,
st
.
h
,
protocols
,
st
.
protocols
)
}
}
}
vendor/gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket/util.go
deleted
100644 → 0
View file @
a40ef343
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
websocket
import
(
"crypto/rand"
"crypto/sha1"
"encoding/base64"
"io"
"net/http"
"strings"
)
// tokenListContainsValue returns true if the 1#token header with the given
// name contains token.
func
tokenListContainsValue
(
header
http
.
Header
,
name
string
,
value
string
)
bool
{
for
_
,
v
:=
range
header
[
name
]
{
for
_
,
s
:=
range
strings
.
Split
(
v
,
","
)
{
if
strings
.
EqualFold
(
value
,
strings
.
TrimSpace
(
s
))
{
return
true
}
}
}
return
false
}
var
keyGUID
=
[]
byte
(
"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
)
func
computeAcceptKey
(
challengeKey
string
)
string
{
h
:=
sha1
.
New
()
h
.
Write
([]
byte
(
challengeKey
))
h
.
Write
(
keyGUID
)
return
base64
.
StdEncoding
.
EncodeToString
(
h
.
Sum
(
nil
))
}
func
generateChallengeKey
()
(
string
,
error
)
{
p
:=
make
([]
byte
,
16
)
if
_
,
err
:=
io
.
ReadFull
(
rand
.
Reader
,
p
);
err
!=
nil
{
return
""
,
err
}
return
base64
.
StdEncoding
.
EncodeToString
(
p
),
nil
}
vendor/gx/QmNvACkuNdmJwK4SBHLrxDjEerWqSFnd2qy7CKcn4ouZ3p/websocket/util_test.go
deleted
100644 → 0
View file @
a40ef343
// Copyright 2014 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
websocket
import
(
"net/http"
"testing"
)
var
tokenListContainsValueTests
=
[]
struct
{
value
string
ok
bool
}{
{
"WebSocket"
,
true
},
{
"WEBSOCKET"
,
true
},
{
"websocket"
,
true
},
{
"websockets"
,
false
},
{
"x websocket"
,
false
},
{
"websocket x"
,
false
},
{
"other,websocket,more"
,
true
},
{
"other, websocket, more"
,
true
},
}
func
TestTokenListContainsValue
(
t
*
testing
.
T
)
{
for
_
,
tt
:=
range
tokenListContainsValueTests
{
h
:=
http
.
Header
{
"Upgrade"
:
{
tt
.
value
}}
ok
:=
tokenListContainsValue
(
h
,
"Upgrade"
,
"websocket"
)
if
ok
!=
tt
.
ok
{
t
.
Errorf
(
"tokenListContainsValue(h, n, %q) = %v, want %v"
,
tt
.
value
,
ok
,
tt
.
ok
)
}
}
}
vendor/gx/QmPC2dW6jyNzzBKYuHLBhxzfWaUSkyC9qaGMz7ciytRSFM/go.uuid/.gxignore
deleted
100644 → 0
View file @
a40ef343
Godeps/*
\ No newline at end of file
vendor/gx/QmPC2dW6jyNzzBKYuHLBhxzfWaUSkyC9qaGMz7ciytRSFM/go.uuid/.travis.yml
deleted
100644 → 0
View file @
a40ef343
language
:
go
go
:
-
1.0
-
1.1
-
1.2
-
1.3
-
1.4
-
1.5
sudo
:
false
notifications
:
email
:
false
vendor/gx/QmPC2dW6jyNzzBKYuHLBhxzfWaUSkyC9qaGMz7ciytRSFM/go.uuid/LICENSE
deleted
100644 → 0
View file @
a40ef343
Copyright (C) 2013-2015 by Maxim Bublis <b@codemonkey.ru>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
vendor/gx/QmPC2dW6jyNzzBKYuHLBhxzfWaUSkyC9qaGMz7ciytRSFM/go.uuid/README.md
deleted
100644 → 0
View file @
a40ef343
# UUID package for Go language
[

](https://travis-ci.org/satori/go.uuid)
[

](http://godoc.org/github.com/satori/go.uuid)
This package provides pure Go implementation of Universally Unique Identifier (UUID). Supported both creation and parsing of UUIDs.
With 100% test coverage and benchmarks out of box.
Supported versions:
*
Version 1, based on timestamp and MAC address (RFC 4122)
*
Version 2, based on timestamp, MAC address and POSIX UID/GID (DCE 1.1)
*
Version 3, based on MD5 hashing (RFC 4122)
*
Version 4, based on random numbers (RFC 4122)
*
Version 5, based on SHA-1 hashing (RFC 4122)
## Installation
Use the
`go`
command:
$ go get github.com/satori/go.uuid
## Requirements
UUID package requires any stable version of Go Programming Language.
It is tested against following versions of Go: 1.0-1.5
## Example
```
go
package
main
import
(
"fmt"
"github.com/satori/go.uuid"
)
func
main
()
{
// Creating UUID Version 4
u1
:=
uuid
.
NewV4
()
fmt
.
Printf
(
"UUIDv4: %s
\n
"
,
u1
)
// Parsing UUID from string input
u2
,
err
:=
uuid
.
FromString
(
"6ba7b810-9dad-11d1-80b4-00c04fd430c8"
)
if
err
!=
nil
{
fmt
.
Printf
(
"Something gone wrong: %s"
,
err
)
}
fmt
.
Printf
(
"Successfully parsed: %s"
,
u2
)
}
```
## Documentation
[
Documentation
](
http://godoc.org/github.com/satori/go.uuid
)
is hosted at GoDoc project.
## Links
*
[
RFC 4122
](
http://tools.ietf.org/html/rfc4122
)
*
[
DCE 1.1: Authentication and Security Services
](
http://pubs.opengroup.org/onlinepubs/9696989899/chap5.htm#tagcjh_08_02_01_01
)
## Copyright
Copyright (C) 2013-2015 by Maxim Bublis
<b@codemonkey.ru>
.
UUID package released under MIT License.
See
[
LICENSE
](
https://github.com/satori/go.uuid/blob/master/LICENSE
)
for details.
Prev
1
…
3
4
5
6
7
8
9
10
11
…
19
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment