private void Enqueue(Messages.Request request)
 {
     if (request.Data.Payload.Data != null)
     //i need to sanitize the ints here too.
     {
         foreach (var item in request.Data.Payload.Data)
         {
             if (item.Value != null && item.Value.GetType() == typeof(int))
             {
                 request.Data.Payload.Data[item.Key] = Convert.ToInt64(item.Value);
             }
         }
         unconfirmedChangesets.Enqueue(request.Data.Payload.Data);
     }
     sendQueue.Enqueue(Newtonsoft.Json.JsonConvert.SerializeObject(request));
 }
        private void subscribeNotification(string path)
        {
            var req = new Messages.Request("n",
                                           new Messages.RequestPayload()
            {
                Path = "/" + path
            });

            Enqueue(req);
            req = new Messages.Request("q",
                                       new Messages.RequestPayload()
            {
                Path = "/" + path, h = string.Empty
            });
            Enqueue(req);
        }
        private void HandleHandshake(string data)
        {
            dynamic obj = Newtonsoft.Json.JsonConvert.DeserializeObject(data);

            obj = obj.d;
            string type = obj.t;

            if (type == "r")
            {
                //this means a redirect!
                obj = obj.d;
                //now on obj i have a redirection.
                firebaseUrl = "wss://" + obj + "/.ws";
                initializeConnections();
                return;
            }
            obj        = obj.d;
            serverTime = obj.ts;
            authurl    = obj.h;
            authToken  = obj.s;
            var initialRequest = new Messages.Request("s",
                                                      new Messages.RequestPayload()
            {
                initialization = new Dictionary <string, object>()
                {
                    { "sdk.js.3 - 6 - 2", 1 }
                }
            });

            //"{\"t\":\"d\",\"d\":{\"r\":1,\"a\":\"s\",\"b\":{\"c\":{\"sdk.js.3 - 6 - 2\":1}}}}"
            Enqueue(initialRequest);
            processInput = PreProcessInput;
            //tests:
            //it seems that if i request an n, it is a notification of changes, but then i have to actually do a query for the information to start coming.


            foreach (var path in subscribedPaths)
            {
                subscribeNotification(path);
            }
        }