"use strict";function Rooms(a){roomsOptions=a}var roomsOptions,transporter,messageTypes={CONNECT:"connect",MESSAGE:"message",REQUEST_NUM_OF_USERS:"numberOfUsersInRoom",STATE_CHANGE:"stateChange",GET_STATE:"getState",DBCONNECTOR:"dbconnector",PRIVATE_MESSAGE:"privmessage"},CONNECTION="connection",JOIN_ROOM="joinRoom",REGISTER="register",STORE_STATE="storeState",REQUEST_NUM_OF_USERS=messageTypes.REQUEST_NUM_OF_USERS,PRIVATE_MESSAGE="privmessage",SUBSCRIPTIONS="subscriptions",DISCONNECT="disconnect",sendMessageToLog=function(a){roomsOptions.debugMode&&console.log(a)};Rooms.prototype.registerUser=function(a){var b={userId:a,roomName:roomsOptions.roomSetup.roomName};this.sendMessage(REGISTER,b),roomsOptions.userRegisteredCallBackFunction()},Rooms.prototype.storeState=function(a,b,c){var d={roomName:roomsOptions.roomSetup.roomName,name:b,vo:a,userId:c};sendMessageToLog("store state "+b),this.sendMessage(STORE_STATE,d)},Rooms.prototype.getNumberOfRegisteredUsersInRoom=function(a){var b={userId:a,room:roomsOptions.roomSetup.roomName};this.sendMessage(REQUEST_NUM_OF_USERS,b),sendMessageToLog("request num of users in a room to user: "+JSON.stringify(b))},Rooms.prototype.getState=function(a,b){sendMessageToLog("get state: "+b);var c={userId:a,room:roomsOptions.roomSetup.roomName,stateName:b};this.sendMessage(GET_STATE,c)},Rooms.prototype[messageTypes.PRIVATE_MESSAGE]=function(a){sendMessageToLog("receive private message"),roomsOptions.hasOwnProperty("privateMessageCallBack")&&privateMessageCallBack(a)},Rooms.prototype.start=function(a){switch(transporter=a.transporter,a.type){case"socket.io":Object.keys(messageTypes).forEach(function(a){transporter.on(messageTypes[a],function(b){Rooms.prototype[messageTypes[a]](b)})});break;case"engine.io":transporter.onopen=function(){transporter.onmessage=function(a){var b=JSON.parse(a);Rooms.prototype[b.message](b.data)}};break;case"SockJS":transporter.onopen=function(){transporter.onmessage=function(a){sendMessageToLog(a);var b=JSON.parse(a.data);Rooms.prototype[b.message](b.data)}}}},Rooms.prototype.callDbConnector=function(a,b,c,d){var e={userId:a,methodName:b,room:roomsOptions.roomSetup.roomName,callBackMethodName:c,params:d};this.sendMessage("dbconnector",e)},Rooms.prototype[messageTypes.CONNECT]=function(){this.sendMessage(JOIN_ROOM,roomsOptions.roomSetup),sendMessageToLog("connect to room: "+roomsOptions.roomSetup.roomName),roomsOptions.userConnectedCallBackFunction()},Rooms.prototype[messageTypes.DBCONNECTOR]=function(a){sendMessageToLog("dbconnector message back, methodName: "+a.data.methodName),a.data.hasOwnProperty("callBackMethodName")&&(roomsOptions.hasOwnProperty("serviceCallBackHandler")?roomsOptions.serviceCallBackHandler(a):window[a.data.callBackMethodName](a))},Rooms.prototype[messageTypes.MESSAGE]=function(a){sendMessageToLog("message from room"),null!=messageFromRoomCallBackfunction&&messageFromRoomCallBackfunction(a)},Rooms.prototype[messageTypes.REQUEST_NUM_OF_USERS]=function(a){sendMessageToLog("numberOfUsersInRoom message: "+a.size),null!=roomsOptions.numOfUsersInARoomCallBackFunction&&roomsOptions.numOfUsersInARoomCallBackFunction(a)},Rooms.prototype[messageTypes.GET_STATE]=function(a){sendMessageToLog("get state results: "+a.name),messageFromRoomCallBackfunction(a.vo)},Rooms.prototype[messageTypes.STATE_CHANGE]=function(a){sendMessageToLog("get state change: "+a.name),roomsOptions.stateChangeCallBackFunction(a.vo)},Rooms.makeid=function(a){var b,c="",d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";for(b=0;a>b;b++)c+=d.charAt(Math.floor(Math.random()*d.length));return c},Rooms.prototype.sendMessage=function(a,b){transporter.send(JSON.stringify({message:a,data:b})),sendMessageToLog("send message to room: "+a)},"undefined"!=typeof exports&&(exports.transporter=transporter,exports.roomsOptions=roomsOptions,exports.CONNECTION=CONNECTION,exports.CONNECT=messageTypes.CONNECT,exports.MESSAGE=messageTypes.MESSAGE,exports.JOIN_ROOM=JOIN_ROOM,exports.REGISTER=REGISTER,exports.REQUEST_NUM_OF_USERS=REQUEST_NUM_OF_USERS,exports.STORE_STATE=STORE_STATE,exports.STATE_CHANGE=messageTypes.STATE_CHANGE,exports.PRIVATE_MESSAGE=PRIVATE_MESSAGE,exports.GET_STATE=messageTypes.GET_STATE,exports.SUBSCRIPTIONS=SUBSCRIPTIONS,exports.DISCONNECT=DISCONNECT,exports.DBCONNECTOR=messageTypes.DBCONNECTOR);