From a6f6284229689330be5f69cddda27f98d15642f2 Mon Sep 17 00:00:00 2001 From: Serene Han Date: Fri, 29 Jan 2016 08:56:31 -0800 Subject: [PATCH] Separate broker HTTP and snowflake heap go files --- broker/{snowflake-broker.go => broker.go} | 53 ++--------------------- broker/snowflake-heap.go | 46 ++++++++++++++++++++ 2 files changed, 50 insertions(+), 49 deletions(-) rename broker/{snowflake-broker.go => broker.go} (81%) create mode 100644 broker/snowflake-heap.go diff --git a/broker/snowflake-broker.go b/broker/broker.go similarity index 81% rename from broker/snowflake-broker.go rename to broker/broker.go index a6daa87..dda20cb 100644 --- a/broker/snowflake-broker.go +++ b/broker/broker.go @@ -11,7 +11,6 @@ package snowflake_broker import ( "container/heap" - // "fmt" "io/ioutil" "log" "net" @@ -19,58 +18,14 @@ import ( "time" ) -// This is an intermediate step - a basic hardcoded appengine rendezvous -// to a single browser snowflake. - // This is minimum viable client-proxy registration. -// TODO: better, more secure registration corresponding to what's in +// TODO(#13): better, more secure registration corresponding to what's in // the python flashproxy facilitator. -// Slice of available snowflake proxies. -// var snowflakes []chan []byte - -type Snowflake struct { - id string - offerChannel chan []byte - answerChannel chan []byte - clients int - index int -} - -// Implements heap.Interface, and holds Snowflakes. -type SnowflakeHeap []*Snowflake - -func (sh SnowflakeHeap) Len() int { return len(sh) } - -func (sh SnowflakeHeap) Less(i, j int) bool { - // Snowflakes serving less clients should sort earlier. - return sh[i].clients < sh[j].clients -} - -func (sh SnowflakeHeap) Swap(i, j int) { - sh[i], sh[j] = sh[j], sh[i] - sh[i].index = i - sh[j].index = j -} - -func (sh *SnowflakeHeap) Push(s interface{}) { - n := len(*sh) - snowflake := s.(*Snowflake) - snowflake.index = n - *sh = append(*sh, snowflake) -} - -// Only valid when Len() > 0. -func (sh *SnowflakeHeap) Pop() interface{} { - flakes := *sh - n := len(flakes) - snowflake := flakes[n-1] - snowflake.index = -1 - *sh = flakes[0 : n-1] - return snowflake -} - var snowflakes *SnowflakeHeap + +// Map keeping track of snowflakeIDs required to match SDP answers from +// the second http POST. var snowflakeMap map[string]*Snowflake // Create and add a Snowflake to the heap. diff --git a/broker/snowflake-heap.go b/broker/snowflake-heap.go new file mode 100644 index 0000000..d37228f --- /dev/null +++ b/broker/snowflake-heap.go @@ -0,0 +1,46 @@ +/* +Keeping track of pending available snowflake proxies. +*/ + +package snowflake_broker + +type Snowflake struct { + id string + offerChannel chan []byte + answerChannel chan []byte + clients int + index int +} + +// Implements heap.Interface, and holds Snowflakes. +type SnowflakeHeap []*Snowflake + +func (sh SnowflakeHeap) Len() int { return len(sh) } + +func (sh SnowflakeHeap) Less(i, j int) bool { + // Snowflakes serving less clients should sort earlier. + return sh[i].clients < sh[j].clients +} + +func (sh SnowflakeHeap) Swap(i, j int) { + sh[i], sh[j] = sh[j], sh[i] + sh[i].index = i + sh[j].index = j +} + +func (sh *SnowflakeHeap) Push(s interface{}) { + n := len(*sh) + snowflake := s.(*Snowflake) + snowflake.index = n + *sh = append(*sh, snowflake) +} + +// Only valid when Len() > 0. +func (sh *SnowflakeHeap) Pop() interface{} { + flakes := *sh + n := len(flakes) + snowflake := flakes[n-1] + snowflake.index = -1 + *sh = flakes[0 : n-1] + return snowflake +}