There is no reason to export these functions.
This commit is contained in:
+1
-1
@@ -45,7 +45,7 @@ func prepareQueryString(params url.Values) string {
|
||||
// * The request path (e.g. /some/resource)
|
||||
// * The query parameters sorted by key, with keys converted to lowercase, then joined as in the query string.
|
||||
// Note that the string must not be url escaped (e.g. given the keys auth_key: foo, Name: Something else, you get auth_key=foo&name=Something else)
|
||||
func RestAuthenticationHandler(h http.Handler) http.Handler {
|
||||
func restAuthenticationHandler(h http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
appID := vars["app_id"]
|
||||
|
||||
+7
-7
@@ -71,7 +71,7 @@ func (c *Channel) Subscribe(a *App, conn *Connection, channelData string) error
|
||||
c.Lock()
|
||||
defer c.Unlock()
|
||||
|
||||
subscription := NewSubscription(conn, channelData)
|
||||
subscription := newSubscription(conn, channelData)
|
||||
c.Subscriptions[conn.SocketID] = subscription
|
||||
|
||||
if c.IsPresence() {
|
||||
@@ -106,7 +106,7 @@ func (c *Channel) Subscribe(a *App, conn *Connection, channelData string) error
|
||||
|
||||
// pusher_internal:subscription_succeeded
|
||||
data := make(map[string]SubscriptionSucceeedEventPresenceData)
|
||||
data["presence"] = NewSubscriptionSucceedEventPresenceData(c)
|
||||
data["presence"] = newSubscriptionSucceedEventPresenceData(c)
|
||||
|
||||
js, err = json.Marshal(data)
|
||||
|
||||
@@ -115,9 +115,9 @@ func (c *Channel) Subscribe(a *App, conn *Connection, channelData string) error
|
||||
return err
|
||||
}
|
||||
|
||||
conn.Publish(NewSubscriptionSucceededEvent(c.ChannelID, string(js)))
|
||||
conn.Publish(newSubscriptionSucceededEvent(c.ChannelID, string(js)))
|
||||
} else {
|
||||
conn.Publish(NewSubscriptionSucceededEvent(c.ChannelID, "{}"))
|
||||
conn.Publish(newSubscriptionSucceededEvent(c.ChannelID, "{}"))
|
||||
}
|
||||
|
||||
// WebHook
|
||||
@@ -179,7 +179,7 @@ func NewChannel(channelID string) *Channel {
|
||||
func (c *Channel) PublishMemberAddedEvent(a *App, data string, subscription *Subscription) {
|
||||
for _, subs := range c.Subscriptions {
|
||||
if subs != subscription {
|
||||
subs.Connection.Publish(NewMemberAddedEvent(c.ChannelID, data))
|
||||
subs.Connection.Publish(newMemberAddedEvent(c.ChannelID, data))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -188,7 +188,7 @@ func (c *Channel) PublishMemberAddedEvent(a *App, data string, subscription *Sub
|
||||
func (c *Channel) PublishMemberRemovedEvent(a *App, subscription *Subscription) {
|
||||
for _, subs := range c.Subscriptions {
|
||||
if subs != subscription {
|
||||
subs.Connection.Publish(NewMemberRemovedEvent(c.ChannelID, subscription))
|
||||
subs.Connection.Publish(newMemberRemovedEvent(c.ChannelID, subscription))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -211,7 +211,7 @@ func (c *Channel) Publish(a *App, event RawEvent, ignore string) error {
|
||||
|
||||
for _, subs := range c.Subscriptions {
|
||||
if subs.Connection.SocketID != ignore {
|
||||
subs.Connection.Publish(NewResponseEvent(event.Event, event.Channel, v))
|
||||
subs.Connection.Publish(newResponseEvent(event.Event, event.Channel, v))
|
||||
} else {
|
||||
// Webhook
|
||||
if strings.HasPrefix(event.Event, "client-") {
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ type Connection struct {
|
||||
}
|
||||
|
||||
// Create a new Subscriber
|
||||
func NewConnection(socketID string, s *websocket.Conn) *Connection {
|
||||
func newConnection(socketID string, s *websocket.Conn) *Connection {
|
||||
log.Infof("Creating a new Subscriber %+v", socketID)
|
||||
|
||||
return &Connection{SocketID: socketID, Socket: s}
|
||||
|
||||
+8
-8
@@ -29,7 +29,7 @@ type UnsupportedProtocolVersionError struct {
|
||||
BaseWebsocketError
|
||||
}
|
||||
|
||||
func NewUnsupportedProtocolVersionError() UnsupportedProtocolVersionError {
|
||||
func newUnsupportedProtocolVersionError() UnsupportedProtocolVersionError {
|
||||
return UnsupportedProtocolVersionError{
|
||||
BaseWebsocketError{Code: UNSUPPORTED_PROTOCOL_VERSION, Msg: "Unsupported protocol version"},
|
||||
}
|
||||
@@ -41,7 +41,7 @@ type ApplicationDoesNotExistsError struct {
|
||||
BaseWebsocketError
|
||||
}
|
||||
|
||||
func NewApplicationDoesNotExistsError() ApplicationDoesNotExistsError {
|
||||
func newApplicationDoesNotExistsError() ApplicationDoesNotExistsError {
|
||||
return ApplicationDoesNotExistsError{
|
||||
BaseWebsocketError{Code: APPLICATION_DOES_NOT_EXISTS, Msg: "Could not found an app with the given key"},
|
||||
}
|
||||
@@ -52,7 +52,7 @@ type NoProtocolVersionSuppliedError struct {
|
||||
BaseWebsocketError
|
||||
}
|
||||
|
||||
func NewNoProtocolVersionSuppliedError() NoProtocolVersionSuppliedError {
|
||||
func newNoProtocolVersionSuppliedError() NoProtocolVersionSuppliedError {
|
||||
return NoProtocolVersionSuppliedError{
|
||||
BaseWebsocketError{Code: NO_PROTOCOL_VERSION_SUPPLIED, Msg: "No protocol version supplied"},
|
||||
}
|
||||
@@ -64,7 +64,7 @@ type ApplicationDisabledError struct {
|
||||
BaseWebsocketError
|
||||
}
|
||||
|
||||
func NewApplicationDisabledError() NoProtocolVersionSuppliedError {
|
||||
func newApplicationDisabledError() NoProtocolVersionSuppliedError {
|
||||
return NoProtocolVersionSuppliedError{
|
||||
BaseWebsocketError{Code: APPLICATION_DISABLED, Msg: "Application disabled"},
|
||||
}
|
||||
@@ -75,7 +75,7 @@ type ApplicationOnlyAccepsSSLError struct {
|
||||
BaseWebsocketError
|
||||
}
|
||||
|
||||
func NewApplicationOnlyAccepsSSLError() ApplicationOnlyAccepsSSLError {
|
||||
func newApplicationOnlyAccepsSSLError() ApplicationOnlyAccepsSSLError {
|
||||
return ApplicationOnlyAccepsSSLError{
|
||||
BaseWebsocketError{Code: APPLICATION_ONLY_ACCEPTS_SSL, Msg: "Application only accepts SSL connections, reconnect using wss://"},
|
||||
}
|
||||
@@ -86,7 +86,7 @@ type InvalidVersionStringFormatError struct {
|
||||
BaseWebsocketError
|
||||
}
|
||||
|
||||
func NewInvalidVersionStringFormatError() InvalidVersionStringFormatError {
|
||||
func newInvalidVersionStringFormatError() InvalidVersionStringFormatError {
|
||||
return InvalidVersionStringFormatError{
|
||||
BaseWebsocketError{Code: INVALID_VERSION_STRING_FORMAT, Msg: "Invalid version string format"},
|
||||
}
|
||||
@@ -99,7 +99,7 @@ type GenericReconnectImmediatelyError struct {
|
||||
BaseWebsocketError
|
||||
}
|
||||
|
||||
func NewGenericReconnectImmediatelyError() GenericReconnectImmediatelyError {
|
||||
func newGenericReconnectImmediatelyError() GenericReconnectImmediatelyError {
|
||||
return GenericReconnectImmediatelyError{
|
||||
BaseWebsocketError{Code: GENERIC_RECONNECT_IMMEDIATELY, Msg: "Generic reconnect immediately"},
|
||||
}
|
||||
@@ -111,7 +111,7 @@ type GenericError struct {
|
||||
BaseWebsocketError
|
||||
}
|
||||
|
||||
func NewGenericError(msg string) GenericError {
|
||||
func newGenericError(msg string) GenericError {
|
||||
return GenericError{
|
||||
BaseWebsocketError{Code: GENERIC_ERROR, Msg: msg},
|
||||
}
|
||||
|
||||
+11
-11
@@ -30,7 +30,7 @@ type SubscribeEvent struct {
|
||||
}
|
||||
|
||||
// Create a new subscribe event with the specified channel and data
|
||||
func NewSubscribeEvent(channel, auth, channelData string) SubscribeEvent {
|
||||
func newSubscribeEvent(channel, auth, channelData string) SubscribeEvent {
|
||||
data := SubscribeEventData{Channel: channel, Auth: auth, ChannelData: channelData}
|
||||
return SubscribeEvent{Event: "pusher:subscribe", Data: data}
|
||||
}
|
||||
@@ -51,7 +51,7 @@ type UnsubscribeEvent struct {
|
||||
}
|
||||
|
||||
// Create a new unsubscribe event for the specified channel
|
||||
func NewUnsubscribeEvent(channel string) UnsubscribeEvent {
|
||||
func newUnsubscribeEvent(channel string) UnsubscribeEvent {
|
||||
data := UnsubscribeEventData{Channel: channel}
|
||||
return UnsubscribeEvent{Event: "pusher:unsubscribe", Data: data}
|
||||
}
|
||||
@@ -67,7 +67,7 @@ type SubscriptionSucceededEvent struct {
|
||||
}
|
||||
|
||||
// Create a new subscription succeed event for the specified channel
|
||||
func NewSubscriptionSucceededEvent(channel, data string) SubscriptionSucceededEvent {
|
||||
func newSubscriptionSucceededEvent(channel, data string) SubscriptionSucceededEvent {
|
||||
return SubscriptionSucceededEvent{Event: "pusher_internal:subscription_succeeded", Channel: channel, Data: data}
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ type SubscriptionSucceeedEventPresenceData struct {
|
||||
Count int `json:"count"`
|
||||
}
|
||||
|
||||
func NewSubscriptionSucceedEventPresenceData(c *Channel) SubscriptionSucceeedEventPresenceData {
|
||||
func newSubscriptionSucceedEventPresenceData(c *Channel) SubscriptionSucceeedEventPresenceData {
|
||||
event := SubscriptionSucceeedEventPresenceData{}
|
||||
|
||||
var ids []string
|
||||
@@ -127,7 +127,7 @@ type PongEvent struct {
|
||||
}
|
||||
|
||||
// Create a new pong event
|
||||
func NewPongEvent() PongEvent {
|
||||
func newPongEvent() PongEvent {
|
||||
return PongEvent{Event: "pusher:pong", Data: "{}"}
|
||||
}
|
||||
|
||||
@@ -141,7 +141,7 @@ type PingEvent struct {
|
||||
}
|
||||
|
||||
// Create a new ping event
|
||||
func NewPingEvent() PingEvent {
|
||||
func newPingEvent() PingEvent {
|
||||
return PingEvent{Event: "pusher:ping", Data: "{}"}
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ type ErrorEvent struct {
|
||||
// Pusher protocol is very strange in some parts
|
||||
// It send null in some errors.
|
||||
// So I created this GENERIC_ERROR thing, just to verify if the json must have null on the error code
|
||||
func NewErrorEvent(code int, message string) ErrorEvent {
|
||||
func newErrorEvent(code int, message string) ErrorEvent {
|
||||
var data interface{}
|
||||
|
||||
if code == GENERIC_ERROR {
|
||||
@@ -203,7 +203,7 @@ type ConnectionEstablishedEvent struct {
|
||||
}
|
||||
|
||||
// Create a new connection established event using the specified socketId
|
||||
func NewConnectionEstablishedEvent(socketId string) ConnectionEstablishedEvent {
|
||||
func newConnectionEstablishedEvent(socketId string) ConnectionEstablishedEvent {
|
||||
data := ConnectionEstablishedEventData{SocketId: socketId, ActivityTimeout: 120}
|
||||
|
||||
b, err := json.Marshal(data)
|
||||
@@ -226,7 +226,7 @@ type MemberAddedEvent struct {
|
||||
Data string `json:"data"`
|
||||
}
|
||||
|
||||
func NewMemberAddedEvent(channel, data string) MemberAddedEvent {
|
||||
func newMemberAddedEvent(channel, data string) MemberAddedEvent {
|
||||
return MemberAddedEvent{Event: "pusher_internal:member_added", Channel: channel, Data: data}
|
||||
}
|
||||
|
||||
@@ -241,7 +241,7 @@ type MemberRemovedEvent struct {
|
||||
Data string `json:"data"`
|
||||
}
|
||||
|
||||
func NewMemberRemovedEvent(channel string, s *Subscription) MemberRemovedEvent {
|
||||
func newMemberRemovedEvent(channel string, s *Subscription) MemberRemovedEvent {
|
||||
data, err := json.Marshal(struct {
|
||||
UserID string `json:"user_id"`
|
||||
}{
|
||||
@@ -273,6 +273,6 @@ type ResponseEvent struct {
|
||||
}
|
||||
|
||||
// The response event that is broadcasted to the client sockets
|
||||
func NewResponseEvent(name, channel string, data interface{}) ResponseEvent {
|
||||
func newResponseEvent(name, channel string, data interface{}) ResponseEvent {
|
||||
return ResponseEvent{Event: name, Channel: channel, Data: data}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
)
|
||||
|
||||
// Check if the application is disabled
|
||||
func RestCheckAppDisabledHandler(h http.Handler) http.Handler {
|
||||
func restCheckAppDisabledHandler(h http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
appID := vars["app_id"]
|
||||
|
||||
+4
-4
@@ -29,7 +29,7 @@ import (
|
||||
// Response is an empty JSON hash.
|
||||
//
|
||||
// POST /apps/{app_id}/events
|
||||
func PostEvents(w http.ResponseWriter, r *http.Request) {
|
||||
func postEvents(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
appID := vars["app_id"]
|
||||
|
||||
@@ -95,7 +95,7 @@ func PostEvents(w http.ResponseWriter, r *http.Request) {
|
||||
// }
|
||||
//
|
||||
// GET /apps/{app_id}/channels
|
||||
func GetChannels(w http.ResponseWriter, r *http.Request) {
|
||||
func getChannels(w http.ResponseWriter, r *http.Request) {
|
||||
params := r.URL.Query()
|
||||
vars := mux.Vars(r)
|
||||
|
||||
@@ -176,7 +176,7 @@ func GetChannels(w http.ResponseWriter, r *http.Request) {
|
||||
// }
|
||||
//
|
||||
// GET /apps/{app_id}/channels/{channel_name}
|
||||
func GetChannel(w http.ResponseWriter, r *http.Request) {
|
||||
func getChannel(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json;charset=UTF-8")
|
||||
|
||||
params := r.URL.Query()
|
||||
@@ -266,7 +266,7 @@ func GetChannel(w http.ResponseWriter, r *http.Request) {
|
||||
// }
|
||||
//
|
||||
// GET /apps/{app_id}/channels/{channel_name}/users
|
||||
func GetChannelUsers(w http.ResponseWriter, r *http.Request) {
|
||||
func getChannelUsers(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
|
||||
appID := vars["app_id"]
|
||||
|
||||
+2
-2
@@ -31,8 +31,8 @@ func NewRouter() *mux.Router {
|
||||
handler = route.HandlerFunc
|
||||
|
||||
if route.RequiresRestAuth {
|
||||
handler = RestAuthenticationHandler(handler)
|
||||
handler = RestCheckAppDisabledHandler(handler)
|
||||
handler = restAuthenticationHandler(handler)
|
||||
handler = restCheckAppDisabledHandler(handler)
|
||||
}
|
||||
|
||||
router.Methods(route.Method).Path(route.Pattern).Name(route.Name).Handler(handler)
|
||||
|
||||
+5
-5
@@ -24,35 +24,35 @@ var routes = Routes{
|
||||
"PostEvents",
|
||||
"POST",
|
||||
"/apps/{app_id}/events",
|
||||
PostEvents,
|
||||
postEvents,
|
||||
true,
|
||||
},
|
||||
Route{
|
||||
"GetChannels",
|
||||
"GET",
|
||||
"/apps/{app_id}/channels",
|
||||
GetChannels,
|
||||
getChannels,
|
||||
true,
|
||||
},
|
||||
Route{
|
||||
"GetChannel",
|
||||
"GET",
|
||||
"/apps/{app_id}/channels/{channel_name}",
|
||||
GetChannel,
|
||||
getChannel,
|
||||
true,
|
||||
},
|
||||
Route{
|
||||
"GetChannelUsers",
|
||||
"GET",
|
||||
"/apps/{app_id}/channels/{channel_name}/users",
|
||||
GetChannelUsers,
|
||||
getChannelUsers,
|
||||
true,
|
||||
},
|
||||
Route{
|
||||
"Websocket",
|
||||
"GET",
|
||||
"/app/{key}",
|
||||
Websocket,
|
||||
wsHandler,
|
||||
false,
|
||||
},
|
||||
}
|
||||
|
||||
+1
-1
@@ -12,6 +12,6 @@ type Subscription struct {
|
||||
}
|
||||
|
||||
// Create a new Subscription
|
||||
func NewSubscription(conn *Connection, data string) *Subscription {
|
||||
func newSubscription(conn *Connection, data string) *Subscription {
|
||||
return &Subscription{Connection: conn, Data: data}
|
||||
}
|
||||
|
||||
+10
-10
@@ -47,37 +47,37 @@ type HookEvent struct {
|
||||
UserId string `json:"user_id,omitempty"`
|
||||
}
|
||||
|
||||
func NewChannelOcuppiedHook(channel *Channel) HookEvent {
|
||||
func newChannelOcuppiedHook(channel *Channel) HookEvent {
|
||||
return HookEvent{Name: "channel_occupied", Channel: channel.ChannelID}
|
||||
}
|
||||
|
||||
func NewChannelVacatedHook(channel *Channel) HookEvent {
|
||||
func newChannelVacatedHook(channel *Channel) HookEvent {
|
||||
return HookEvent{Name: "channel_vacated", Channel: channel.ChannelID}
|
||||
}
|
||||
|
||||
func NewMemberAddedHook(channel *Channel, s *Subscription) HookEvent {
|
||||
func newMemberAddedHook(channel *Channel, s *Subscription) HookEvent {
|
||||
return HookEvent{Name: "member_added", Channel: channel.ChannelID, UserId: s.Id}
|
||||
}
|
||||
|
||||
func NewMemberRemovedHook(channel *Channel, s *Subscription) HookEvent {
|
||||
func newMemberRemovedHook(channel *Channel, s *Subscription) HookEvent {
|
||||
return HookEvent{Name: "member_removed", Channel: channel.ChannelID, UserId: s.Id}
|
||||
}
|
||||
|
||||
func NewClientHook(channel *Channel, s *Subscription, event string, data interface{}) HookEvent {
|
||||
func newClientHook(channel *Channel, s *Subscription, event string, data interface{}) HookEvent {
|
||||
return HookEvent{Name: "client_event", Channel: channel.ChannelID, Event: event, Data: data, SocketID: s.Connection.SocketID}
|
||||
}
|
||||
|
||||
// channel_occupied
|
||||
// { "name": "channel_occupied", "channel": "test_channel" }
|
||||
func (a *App) TriggerChannelOccupiedHook(c *Channel) {
|
||||
event := NewChannelOcuppiedHook(c)
|
||||
event := newChannelOcuppiedHook(c)
|
||||
triggerHook(event.Name, a, c, event)
|
||||
}
|
||||
|
||||
// channel_vacated
|
||||
// { "name": "channel_vacated", "channel": "test_channel" }
|
||||
func (a *App) TriggerChannelVacatedHook(c *Channel) {
|
||||
event := NewChannelVacatedHook(c)
|
||||
event := newChannelVacatedHook(c)
|
||||
triggerHook(event.Name, a, c, event)
|
||||
}
|
||||
|
||||
@@ -90,7 +90,7 @@ func (a *App) TriggerChannelVacatedHook(c *Channel) {
|
||||
// "user_id": "user_id associated with the sending socket" # Only for presence channels
|
||||
// }
|
||||
func (a *App) TriggerClientEventHook(c *Channel, s *Subscription, client_event string, data interface{}) {
|
||||
event := NewClientHook(c, s, client_event, data)
|
||||
event := newClientHook(c, s, client_event, data)
|
||||
|
||||
if c.IsPresence() {
|
||||
event.UserId = s.Id
|
||||
@@ -105,7 +105,7 @@ func (a *App) TriggerClientEventHook(c *Channel, s *Subscription, client_event s
|
||||
// "user_id": "a_user_id"
|
||||
// }
|
||||
func (a *App) TriggerMemberAddedHook(c *Channel, s *Subscription) {
|
||||
event := NewMemberAddedHook(c, s)
|
||||
event := newMemberAddedHook(c, s)
|
||||
triggerHook(event.Name, a, c, event)
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ func (a *App) TriggerMemberAddedHook(c *Channel, s *Subscription) {
|
||||
// "user_id": "a_user_id"
|
||||
// }
|
||||
func (a *App) TriggerMemberRemovedHook(c *Channel, s *Subscription) {
|
||||
event := NewMemberRemovedHook(c, s)
|
||||
event := newMemberRemovedHook(c, s)
|
||||
triggerHook(event.Name, a, c, event)
|
||||
}
|
||||
|
||||
|
||||
+28
-28
@@ -33,29 +33,29 @@ func onOpen(conn *websocket.Conn, w http.ResponseWriter, r *http.Request, sessio
|
||||
protocol, err := strconv.Atoi(p)
|
||||
|
||||
if err != nil {
|
||||
return NewInvalidVersionStringFormatError()
|
||||
return newInvalidVersionStringFormatError()
|
||||
}
|
||||
|
||||
switch {
|
||||
case strings.TrimSpace(p) == "":
|
||||
return NewNoProtocolVersionSuppliedError()
|
||||
return newNoProtocolVersionSuppliedError()
|
||||
case protocol != SUPPORTED_PROTOCOL_VERSION:
|
||||
return NewUnsupportedProtocolVersionError()
|
||||
return newUnsupportedProtocolVersionError()
|
||||
case app.ApplicationDisabled:
|
||||
return NewApplicationDisabledError()
|
||||
return newApplicationDisabledError()
|
||||
case r.TLS != nil:
|
||||
if app.OnlySSL {
|
||||
return NewApplicationOnlyAccepsSSLError()
|
||||
return newApplicationOnlyAccepsSSLError()
|
||||
}
|
||||
}
|
||||
|
||||
// Create the new Subscriber
|
||||
connection := NewConnection(sessionID, conn)
|
||||
connection := newConnection(sessionID, conn)
|
||||
app.Connect(connection)
|
||||
|
||||
// Everything went fine. Huhu.
|
||||
if err := conn.WriteJSON(NewConnectionEstablishedEvent(connection.SocketID)); err != nil {
|
||||
return NewGenericReconnectImmediatelyError()
|
||||
if err := conn.WriteJSON(newConnectionEstablishedEvent(connection.SocketID)); err != nil {
|
||||
return newGenericReconnectImmediatelyError()
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -84,13 +84,13 @@ func onMessage(conn *websocket.Conn, w http.ResponseWriter, r *http.Request, ses
|
||||
case io.EOF:
|
||||
onClose(sessionID, app)
|
||||
default:
|
||||
emitWSError(NewGenericReconnectImmediatelyError(), conn)
|
||||
emitWSError(newGenericReconnectImmediatelyError(), conn)
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(message, &event); err != nil {
|
||||
emitWSError(NewGenericReconnectImmediatelyError(), conn)
|
||||
emitWSError(newGenericReconnectImmediatelyError(), conn)
|
||||
break
|
||||
}
|
||||
|
||||
@@ -98,21 +98,21 @@ func onMessage(conn *websocket.Conn, w http.ResponseWriter, r *http.Request, ses
|
||||
|
||||
switch event.Event {
|
||||
case "pusher:ping":
|
||||
if err := conn.WriteJSON(NewPongEvent()); err != nil {
|
||||
emitWSError(NewGenericReconnectImmediatelyError(), conn)
|
||||
if err := conn.WriteJSON(newPongEvent()); err != nil {
|
||||
emitWSError(newGenericReconnectImmediatelyError(), conn)
|
||||
}
|
||||
case "pusher:subscribe":
|
||||
subscribeEvent := SubscribeEvent{}
|
||||
|
||||
if err := json.Unmarshal(message, &subscribeEvent); err != nil {
|
||||
emitWSError(NewGenericReconnectImmediatelyError(), conn)
|
||||
emitWSError(newGenericReconnectImmediatelyError(), conn)
|
||||
break
|
||||
}
|
||||
|
||||
connection, err := app.FindConnection(sessionID)
|
||||
|
||||
if err != nil {
|
||||
emitWSError(NewGenericReconnectImmediatelyError(), conn)
|
||||
emitWSError(newGenericReconnectImmediatelyError(), conn)
|
||||
break
|
||||
}
|
||||
|
||||
@@ -130,7 +130,7 @@ func onMessage(conn *websocket.Conn, w http.ResponseWriter, r *http.Request, ses
|
||||
|
||||
expectedAuthKey := fmt.Sprintf("%s:%s", app.Key, utils.HashMAC([]byte(strings.Join(toSign, ":")), []byte(app.Secret)))
|
||||
if subscribeEvent.Data.Auth != expectedAuthKey {
|
||||
emitWSError(NewGenericError(fmt.Sprintf("Auth value for subscription to %s is invalid", channelName)), conn)
|
||||
emitWSError(newGenericError(fmt.Sprintf("Auth value for subscription to %s is invalid", channelName)), conn)
|
||||
continue
|
||||
}
|
||||
}
|
||||
@@ -139,60 +139,60 @@ func onMessage(conn *websocket.Conn, w http.ResponseWriter, r *http.Request, ses
|
||||
log.Info(subscribeEvent.Data.ChannelData)
|
||||
|
||||
if err := app.Subscribe(channel, connection, subscribeEvent.Data.ChannelData); err != nil {
|
||||
emitWSError(NewGenericReconnectImmediatelyError(), conn)
|
||||
emitWSError(newGenericReconnectImmediatelyError(), conn)
|
||||
}
|
||||
case "pusher:unsubscribe":
|
||||
unsubscribeEvent := UnsubscribeEvent{}
|
||||
|
||||
if err := json.Unmarshal(message, &unsubscribeEvent); err != nil {
|
||||
emitWSError(NewGenericReconnectImmediatelyError(), conn)
|
||||
emitWSError(newGenericReconnectImmediatelyError(), conn)
|
||||
}
|
||||
|
||||
connection, err := app.FindConnection(sessionID)
|
||||
|
||||
if err != nil {
|
||||
emitWSError(NewGenericError(fmt.Sprintf("Could not find a connection with the id %s", sessionID)), conn)
|
||||
emitWSError(newGenericError(fmt.Sprintf("Could not find a connection with the id %s", sessionID)), conn)
|
||||
}
|
||||
|
||||
channel, err := app.FindChannelByChannelID(unsubscribeEvent.Data.Channel)
|
||||
|
||||
if err != nil {
|
||||
emitWSError(NewGenericError(fmt.Sprintf("Could not find a channel with the id %s", unsubscribeEvent.Data.Channel)), conn)
|
||||
emitWSError(newGenericError(fmt.Sprintf("Could not find a channel with the id %s", unsubscribeEvent.Data.Channel)), conn)
|
||||
}
|
||||
|
||||
if err := app.Unsubscribe(channel, connection); err != nil {
|
||||
emitWSError(NewGenericReconnectImmediatelyError(), conn)
|
||||
emitWSError(newGenericReconnectImmediatelyError(), conn)
|
||||
break
|
||||
}
|
||||
default: // CLient Events ??
|
||||
// see http://pusher.com/docs/client_api_guide/client_events#trigger-events
|
||||
if strings.HasPrefix(event.Event, "client-") {
|
||||
if !app.UserEvents {
|
||||
emitWSError(NewGenericError("To send client events, you must enable this feature in the Settings."), conn)
|
||||
emitWSError(newGenericError("To send client events, you must enable this feature in the Settings."), conn)
|
||||
}
|
||||
|
||||
clientEvent := RawEvent{}
|
||||
|
||||
if err := json.Unmarshal(message, &clientEvent); err != nil {
|
||||
log.Error(err)
|
||||
emitWSError(NewGenericReconnectImmediatelyError(), conn)
|
||||
emitWSError(newGenericReconnectImmediatelyError(), conn)
|
||||
break
|
||||
}
|
||||
|
||||
channel, err := app.FindChannelByChannelID(clientEvent.Channel)
|
||||
|
||||
if !channel.IsPresenceOrPrivate() {
|
||||
emitWSError(NewGenericError("Client event rejected - only supported on private and presence channels"), conn)
|
||||
emitWSError(newGenericError("Client event rejected - only supported on private and presence channels"), conn)
|
||||
break
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
emitWSError(NewGenericError(fmt.Sprintf("Could not find a channel with the id %s", clientEvent.Channel)), conn)
|
||||
emitWSError(newGenericError(fmt.Sprintf("Could not find a channel with the id %s", clientEvent.Channel)), conn)
|
||||
}
|
||||
|
||||
if err := app.Publish(channel, clientEvent, sessionID); err != nil {
|
||||
log.Error(err)
|
||||
emitWSError(NewGenericReconnectImmediatelyError(), conn)
|
||||
emitWSError(newGenericReconnectImmediatelyError(), conn)
|
||||
break
|
||||
}
|
||||
}
|
||||
@@ -202,7 +202,7 @@ func onMessage(conn *websocket.Conn, w http.ResponseWriter, r *http.Request, ses
|
||||
}
|
||||
|
||||
// Websocket GET /app/{key}
|
||||
func Websocket(w http.ResponseWriter, r *http.Request) {
|
||||
func wsHandler(w http.ResponseWriter, r *http.Request) {
|
||||
conn, err := upgrader.Upgrade(w, r, nil)
|
||||
defer func() {
|
||||
if conn != nil {
|
||||
@@ -222,7 +222,7 @@ func Websocket(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
emitWSError(NewApplicationDoesNotExistsError(), conn)
|
||||
emitWSError(newApplicationDoesNotExistsError(), conn)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -239,7 +239,7 @@ func Websocket(w http.ResponseWriter, r *http.Request) {
|
||||
// Emit an Websocket ErrorEvent
|
||||
func emitWSError(err WebsocketError, conn *websocket.Conn) {
|
||||
|
||||
event := NewErrorEvent(err.GetCode(), err.GetMsg())
|
||||
event := newErrorEvent(err.GetCode(), err.GetMsg())
|
||||
|
||||
if err := conn.WriteJSON(event); err != nil {
|
||||
log.Error(err)
|
||||
|
||||
Reference in New Issue
Block a user