private FizzUserUpdateEventData ParsePresenceUpdateEventData(FizzTopicMessage message)
        {
            JSONClass payload = JSONNode.Parse(message.Data).AsObject;
            FizzUserUpdateEventData update = new FizzUserUpdateEventData();

            FizzLogger.D(message.Data);

            update.Reason = FizzUserUpdateEventData.UpdateReason.Presence;
            update.UserId = message.From;
            update.Online = payload["is_online"].AsBool;
            return(update);
        }
        private FizzGroupMemberEventData ParseMemberEventData(FizzTopicMessage message)
        {
            JSONClass payload             = JSONNode.Parse(message.Data).AsObject;
            FizzGroupMemberEventData data = new FizzGroupMemberEventData();

            data.MemberId = payload["id"];
            data.GroupId  = message.From;
            data.State    = FizzUtils.ParseState(payload["state"]);
            data.Role     = FizzUtils.ParseRole(payload["role"]);

            return(data);
        }
        private FizzUserUpdateEventData ParseUserUpdateEventData(FizzTopicMessage message)
        {
            JSONClass payload = JSONNode.Parse(message.Data).AsObject;
            FizzUserUpdateEventData update = new FizzUserUpdateEventData();

            FizzLogger.D(message.Data);

            update.Reason        = FizzUserUpdateEventData.UpdateReason.Profile;
            update.UserId        = message.From;
            update.Nick          = payload["nick"];
            update.StatusMessage = payload["status_message"];
            update.ProfileUrl    = payload["profile_url"];
            return(update);
        }
        private void OnMessage(object sender, byte[] messagePayload)
        {
            try
            {
                string           payload = Encoding.UTF8.GetString(messagePayload);
                FizzTopicMessage message = new FizzTopicMessage(payload);

                FizzLogger.D("OnMessage with id: " + message.Id);

                switch (message.Type)
                {
                case "CMSGP":
                    if (OnMessagePublished != null)
                    {
                        OnMessagePublished.Invoke(AdaptTo(message));
                    }
                    break;

                case "CMSGU":
                    if (OnMessageUpdated != null)
                    {
                        OnMessageUpdated.Invoke(AdaptTo(message));
                    }
                    break;

                case "CMSGD":
                    if (OnMessageDeleted != null)
                    {
                        OnMessageDeleted.Invoke(AdaptTo(message));
                    }
                    break;

                default:
                    FizzLogger.W("unrecognized packet received: " + payload);
                    break;
                }
            }
            catch
            {
                FizzLogger.W("received invalid message: " + messagePayload);
            }
        }
예제 #5
0
        public void IntegrityTest()
        {
            JSONClass json    = new JSONClass();
            long      id      = FizzUtils.Now();
            long      created = FizzUtils.Now();

            json[FizzTopicMessage.KEY_ID].AsDouble      = (double)id;
            json[FizzTopicMessage.KEY_TYPE]             = "test";
            json[FizzTopicMessage.KEY_FROM]             = "from";
            json[FizzTopicMessage.KEY_DATA]             = "data";
            json[FizzTopicMessage.KEY_CREATED].AsDouble = (double)created;

            var m = new FizzTopicMessage(json.ToString());

            Assert.AreEqual(m.Id, id);
            Assert.AreEqual(m.Type, "test");
            Assert.AreEqual(m.From, "from");
            Assert.AreEqual(m.Data, "data");
            Assert.AreEqual(m.Created, created);
        }
        private FizzGroupUpdateEventData ParseGroupUpdateEventData(FizzTopicMessage message)
        {
            JSONClass payload = JSONNode.Parse(message.Data).AsObject;
            FizzGroupUpdateEventData update = new FizzGroupUpdateEventData();

            update.GroupId = message.From;
            string reason = payload["reason"];

            FizzLogger.D(message.Data);

            if (reason == "profile")
            {
                update.Reason      = FizzGroupUpdateEventData.UpdateReason.Profile;
                update.Title       = payload["title"];
                update.ImageURL    = payload["image_url"];
                update.Description = payload["description"];
                update.Type        = payload["type"];
            }
            return(update);
        }
        private FizzChannelMessage AdaptTo(FizzTopicMessage message)
        {
            JSONNode  payload         = JSONNode.Parse(message.Data);
            JSONClass translationData = payload["translations"].AsObject;
            IDictionary <string, string> translations = null;

            if (translationData != null)
            {
                translations = new Dictionary <string, string> ();
                foreach (string key in translationData.Keys)
                {
                    translations.Add(key, translationData[key]);
                }
            }

            Dictionary <string, string> dataDict = null;

            if (payload["data"] != null)
            {
                JSONNode messageData = JSONNode.Parse(payload["data"]);
                if (messageData != null)
                {
                    dataDict = new Dictionary <string, string> ();
                    foreach (string key in messageData.Keys)
                    {
                        dataDict.Add(key, messageData[key]);
                    }
                }
            }

            return(new FizzChannelMessage(
                       message.Id,
                       message.From,
                       payload["nick"],
                       payload["to"],
                       payload["body"],
                       dataDict,
                       translations,
                       message.Created
                       ));
        }
        private void OnMessage(object sender, byte[] messagePayload)
        {
            try
            {
                string           payload = Encoding.UTF8.GetString(messagePayload);
                FizzTopicMessage message = new FizzTopicMessage(payload);

                FizzLogger.D("OnMessage with id: " + message.Id);

                switch (message.Type)
                {
                case "CMSGP":
                    if (OnMessagePublished != null)
                    {
                        OnMessagePublished.Invoke(AdaptTo(message));
                    }
                    break;

                case "CMSGU":
                    if (OnMessageUpdated != null)
                    {
                        OnMessageUpdated.Invoke(AdaptTo(message));
                    }
                    break;

                case "CMSGD":
                    if (OnMessageDeleted != null)
                    {
                        OnMessageDeleted.Invoke(AdaptTo(message));
                    }
                    break;

                case "GRPMA":
                    if (OnGroupMemberAdded != null)
                    {
                        OnGroupMemberAdded.Invoke(ParseMemberEventData(message));
                    }
                    break;

                case "GRPMU":
                    if (OnGroupMemberUpdated != null)
                    {
                        OnGroupMemberUpdated.Invoke(ParseMemberEventData(message));
                    }
                    break;

                case "GRPMR":
                    if (OnGroupMemberRemoved != null)
                    {
                        OnGroupMemberRemoved.Invoke(ParseMemberEventData(message));
                    }
                    break;

                case "GRPU":
                    if (OnGroupUpdated != null)
                    {
                        OnGroupUpdated.Invoke(ParseGroupUpdateEventData(message));
                    }
                    break;

                case "USRPU":
                    if (OnUserUpdated != null)
                    {
                        OnUserUpdated.Invoke(ParsePresenceUpdateEventData(message));
                    }
                    break;

                case "USRU":
                    if (OnUserUpdated != null)
                    {
                        OnUserUpdated.Invoke(ParseUserUpdateEventData(message));
                    }
                    break;

                default:
                    FizzLogger.W("unrecognized packet received: " + payload);
                    break;
                }
            }
            catch
            {
                FizzLogger.W("received invalid message: " + messagePayload);
            }
        }