1 package main 2 3 import ( 4 "encoding/json" 5 ) 6 7 const ( 8 BroadcastUserList = -1 - iota 9 BroadcastUserAdd 10 BroadcastUserRemove 11 BroadcastSDP 12 BroadcastCancel 13 BroadcastAccept 14 BroadcastDecline 15 ) 16 17 const broadcastStart = "{\"id\": -0,\"result\":" 18 19 func buildBroadcast(id int, data json.RawMessage) []byte { 20 l := len(broadcastStart) + len(data) + 1 21 dat := make([]byte, l) 22 copy(dat, broadcastStart) 23 copy(dat[len(broadcastStart):], data) 24 id = -id 25 if id > 9 { 26 dat[6] = '-' 27 dat[7] = byte('0' + id/10) 28 } 29 dat[8] = byte('0' + id%10) 30 dat[l-1] = '}' 31 return dat 32 } 33 34 func Broadcast(mc *conn, id int, data json.RawMessage) { 35 var dat json.RawMessage 36 for c := range conns { 37 if c != mc { 38 if len(dat) == 0 { 39 dat = buildBroadcast(id, data) 40 } 41 go c.rpc.SendData(dat) 42 } 43 } 44 } 45