23 } |
23 } |
24 |
24 |
25 // openStream opens a stream URL and returns an http.Response |
25 // openStream opens a stream URL and returns an http.Response |
26 // Note that the caller should close the connection when it's done reading |
26 // Note that the caller should close the connection when it's done reading |
27 // the stream. |
27 // the stream. |
28 // The stream name can be "user", "local", "public" or "hashtag". |
28 // The stream name can be "user", "local", "public", "list" or "hashtag". |
29 // When it is "hashtag", the hashTag argument cannot be empty. |
29 // When it is "hashtag", the param argument contains the hashtag. |
30 func (mc *Client) openStream(streamName, hashTag string) (*websocket.Conn, error) { |
30 // When it is "list", the param argument contains the list ID. |
31 var tag string |
31 func (mc *Client) openStream(streamName, param string) (*websocket.Conn, error) { |
|
32 var tag, list string |
32 |
33 |
33 switch streamName { |
34 switch streamName { |
34 case "user", "public", "public:local": |
35 case "user", "public", "public:local": |
35 case "hashtag": |
36 case "hashtag": |
36 if hashTag == "" { |
37 if param == "" { |
37 return nil, ErrInvalidParameter |
38 return nil, ErrInvalidParameter |
38 } |
39 } |
39 tag = hashTag |
40 tag = param |
|
41 case "list": |
|
42 if param == "" { |
|
43 return nil, ErrInvalidParameter |
|
44 } |
|
45 list = param |
40 default: |
46 default: |
41 return nil, ErrInvalidParameter |
47 return nil, ErrInvalidParameter |
42 } |
48 } |
43 |
49 |
44 if !strings.HasPrefix(mc.APIBase, "http") { |
50 if !strings.HasPrefix(mc.APIBase, "http") { |
54 urlParams := url.Values{} |
60 urlParams := url.Values{} |
55 urlParams.Add("stream", streamName) |
61 urlParams.Add("stream", streamName) |
56 urlParams.Add("access_token", mc.UserToken.AccessToken) |
62 urlParams.Add("access_token", mc.UserToken.AccessToken) |
57 if tag != "" { |
63 if tag != "" { |
58 urlParams.Add("tag", tag) |
64 urlParams.Add("tag", tag) |
|
65 } else if list != "" { |
|
66 urlParams.Add("list", list) |
59 } |
67 } |
60 u.RawQuery = urlParams.Encode() |
68 u.RawQuery = urlParams.Encode() |
61 |
69 |
62 c, _, err := websocket.DefaultDialer.Dial(u.String(), nil) |
70 c, _, err := websocket.DefaultDialer.Dial(u.String(), nil) |
63 return c, err |
71 return c, err |