|
@@ -7,7 +7,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
+
|
|
|
|
|
|
|
|
|
package main
|
|
@@ -22,16 +22,18 @@ import (
|
|
|
"os"
|
|
|
"sync"
|
|
|
|
|
|
- "github.com/campoy/whispering-gophers/util"
|
|
|
+ "code.osinet.fr/fgm/whispering_gophers/util"
|
|
|
)
|
|
|
|
|
|
var (
|
|
|
- peerAddr = flag.String("peer", "", "peer host:port")
|
|
|
- self string
|
|
|
+ listenAddr = flag.String("listen", "", "peer host:port")
|
|
|
+ peerAddr = flag.String("peer", "", "peer host:port")
|
|
|
+ self string
|
|
|
)
|
|
|
|
|
|
type Message struct {
|
|
|
-
|
|
|
+
|
|
|
+ ID string
|
|
|
Addr string
|
|
|
Body string
|
|
|
}
|
|
@@ -39,7 +41,14 @@ type Message struct {
|
|
|
func main() {
|
|
|
flag.Parse()
|
|
|
|
|
|
- l, err := util.Listen()
|
|
|
+ var l net.Listener
|
|
|
+ var err error
|
|
|
+
|
|
|
+ if *listenAddr == "" {
|
|
|
+ l, err = util.ListenOnFirstUsableInterface()
|
|
|
+ } else {
|
|
|
+ l, err = net.Listen("tcp4", *listenAddr)
|
|
|
+ }
|
|
|
if err != nil {
|
|
|
log.Fatal(err)
|
|
|
}
|
|
@@ -117,7 +126,10 @@ func serve(c net.Conn) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
+ if Seen(m.ID) {
|
|
|
+ continue
|
|
|
+ }
|
|
|
|
|
|
fmt.Printf("%#v\n", m)
|
|
|
broadcast(m)
|
|
@@ -129,16 +141,18 @@ func readInput() {
|
|
|
s := bufio.NewScanner(os.Stdin)
|
|
|
for s.Scan() {
|
|
|
m := Message{
|
|
|
-
|
|
|
+
|
|
|
Addr: self,
|
|
|
Body: s.Text(),
|
|
|
+ ID: util.RandomID(),
|
|
|
}
|
|
|
-
|
|
|
+ Seen(m.ID)
|
|
|
broadcast(m)
|
|
|
}
|
|
|
if err := s.Err(); err != nil {
|
|
|
log.Fatal(err)
|
|
|
}
|
|
|
+ os.Exit(0)
|
|
|
}
|
|
|
|
|
|
func dial(addr string) {
|
|
@@ -169,12 +183,21 @@ func dial(addr string) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
+var seenIDs = struct {
|
|
|
+ m map[string]bool
|
|
|
+ sync.Mutex
|
|
|
+}{m: make(map[string]bool)}
|
|
|
|
|
|
|
|
|
|
|
|
func Seen(id string) bool {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+ seenIDs.Lock()
|
|
|
+ defer seenIDs.Unlock()
|
|
|
+
|
|
|
+ ok := seenIDs.m[id]
|
|
|
+
|
|
|
+ seenIDs.m[id] = true
|
|
|
+ return ok
|
|
|
}
|