Skip to content

Commit 5d6df22

Browse files
committed
Added goroutine-safe GetString and GetHTML methods
to interface RoutingTable
1 parent 55eec85 commit 5d6df22

File tree

1 file changed

+53
-1
lines changed

1 file changed

+53
-1
lines changed

lib/routing.go

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import (
1010

1111
type RoutingTable interface {
1212
SeeHost(h *Host)
13+
// may return ""
14+
GetString() string
15+
// may return "", subject to change
16+
GetHTML() string
1317
}
1418

1519

@@ -20,6 +24,8 @@ type BRoutingTable struct {
2024

2125
seehost chan *Host
2226
quitchan chan bool
27+
stringchan chan chan string
28+
htmlchan chan chan string
2329

2430
Log bool
2531
logger *log.Logger
@@ -67,6 +73,10 @@ func (rt *BRoutingTable) main() {
6773
rt.seeHost(h)
6874
case <- rt.quitchan:
6975
return
76+
case r := <- rt.stringchan:
77+
r <- rt.string()
78+
case r := <- rt.htmlchan:
79+
r <- rt.html()
7080
}
7181
}
7282
}
@@ -216,7 +226,8 @@ func (rt *BRoutingTable) balanceleftright(lefti uint) {
216226
}
217227

218228

219-
func (rt *BRoutingTable) String() string {
229+
// not goroutine safe
230+
func (rt *BRoutingTable) string() string {
220231
buf := bytes.NewBuffer(nil)
221232

222233
buf.WriteString("BRoutingTable ===>\n")
@@ -230,3 +241,44 @@ func (rt *BRoutingTable) String() string {
230241
buf.WriteString("<===\n")
231242
return buf.String()
232243
}
244+
245+
// not goroutine safe
246+
func (rt *BRoutingTable) html() string {
247+
buf := bytes.NewBuffer(nil)
248+
249+
buf.WriteString("BRoutingTable<br>\n<table>\n<tr>\n")
250+
251+
for b := 0; b <= rt.maxbucket; b++ {
252+
buf.WriteString(fmt.Sprintf("<th>Bucket %d</th>\n", b))
253+
}
254+
255+
buf.WriteString("</tr>\n")
256+
257+
for b := 0; b <= rt.maxbucket; b++ {
258+
buf.WriteString("<td>")
259+
for _, rth := range rt.buckets[b].hosts {
260+
buf.WriteString(fmt.Sprintf("\t%x | %v @ %v<br>\n", rth.host.Id, XOR(rth.host.Id, rt.id)[0:5], rth.host.Addr))
261+
}
262+
buf.WriteString("</td>")
263+
}
264+
265+
buf.WriteString("</tr>")
266+
267+
buf.WriteString("</table>")
268+
return buf.String()
269+
}
270+
271+
272+
// goroutine safe. not for internal use!
273+
func (rt *BRoutingTable) GetString() string {
274+
r := make(chan string)
275+
rt.stringchan <- r
276+
return <- r
277+
}
278+
279+
// goroutine safe. not for internal use!
280+
func (rt *BRoutingTable) GetHTML() string {
281+
r := make(chan string)
282+
rt.htmlchan <- r
283+
return <- r
284+
}

0 commit comments

Comments
 (0)