public static async Task<string[]> GetMessages(string noteHubId, string userId, string set, string qexpr, string prevlast)
 {
     JavaScriptSerializer jser = new JavaScriptSerializer();
     dynamic sobj = jser.DeserializeObject(set) as dynamic;
     DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion));
     DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(ShortMessage));
     var ser3 = new JavaScriptSerializer();
     System.IO.MemoryStream strm = new System.IO.MemoryStream();
     byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr);
     strm.Write(sbf, 0, sbf.Length);
     strm.Position = 0;
     var _qexpr = ser1.ReadObject(strm) as QueryExpresion;
     var svc = new ShortMessageServiceProxy();
     var _set = new ShortMessageSet();
     _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]);
     _set.PageSize_ = int.Parse(sobj["pageSize"]);
     if (!sobj.ContainsKey("setFilter"))
         throw new Exception("The page is not properly parameterized!");
     else
     {
         Func<string, string, int> count = (s, p) =>
         {
             int _cnt = 0;
             int i = 0;
             while ((i = s.IndexOf(p, i)) != -1)
             {
                 _cnt++;
                 i += p.Length;
             }
             return _cnt;
         };
         string filter = sobj["setFilter"];
         if (filter.EndsWith("&& ToID is not null && GroupID is null && ( ToID == \"{0}\" || FromID == \"{0}\" )") && count(filter, "||") == 1)
         {
             filter = string.Format(filter, userId);
             _set.SetFilter = filter;
         }
         else
             throw new Exception("The page is not properly parameterized!");
     }
     ShortMessage _prevlast = null;
     if (!string.IsNullOrEmpty(prevlast))
     {
         strm = new System.IO.MemoryStream();
         sbf = System.Text.Encoding.UTF8.GetBytes(prevlast);
         strm.Write(sbf, 0, sbf.Length);
         strm.Position = 0;
         _prevlast = ser2.ReadObject(strm) as ShortMessage;
     }
     var cntx = Cntx;
     var result = await svc.GetPageItemsAsync(cntx, _set, _qexpr, _prevlast);
     var ar = new List<string>();
     var udic = new Dictionary<string, User>();
     foreach (var e in result)
     {
         User u, p;
         ShortMessage msg;
         if (!udic.TryGetValue(e.FromID, out u) || !udic.TryGetValue(e.ToID, out p))
         {
             EntitySetType[] excludes = new EntitySetType[]
             {
                 EntitySetType.UserGroup,
                 EntitySetType.ShortMessageAudience,
                 EntitySetType.ShortMessageAttachment,
                 EntitySetType.ShortMessage
             };
             EntitySetRelation[] drills = new EntitySetRelation[]
             {
                 new EntitySetRelation
                 {
                     SetType = EntitySetType.User,
                     RelatedSets = new EntitySetType[] 
                     {
                         EntitySetType.UserAppMember,
                     }
                 }
             };
             msg = await svc.LoadEntityGraphRecursAsync(cntx, e.ID, excludes, drills);
             u = msg.User_FromID;
             p = msg.User_ToID;
             {
                 var member = (from d in u.ChangedUserAppMembers where d.ApplicationID == ApplicationContext.App.ID select d).SingleOrDefault();
                 u.ChangedUserAppMembers = new UserAppMember[] { member };
                 if (member.ChangedMemberCallbacks != null && member.ChangedMemberCallbacks.Length > 0)
                 {
                     var cbk = (from d in member.ChangedMemberCallbacks where d.HubID == noteHubId && d.ChannelID == "System" select d).SingleOrDefault();
                     if (cbk != null)
                         member.ChangedMemberCallbacks = new MemberCallback[] { cbk };
                     else
                         member.ChangedMemberCallbacks = new MemberCallback[] { };
                 }
             }
             {
                 var member = (from d in p.ChangedUserAppMembers where d.ApplicationID == ApplicationContext.App.ID select d).SingleOrDefault();
                 p.ChangedUserAppMembers = new UserAppMember[] { member };
                 if (member.ChangedMemberCallbacks != null && member.ChangedMemberCallbacks.Length > 0)
                 {
                     var cbk = (from d in member.ChangedMemberCallbacks where d.HubID == noteHubId && d.ChannelID == "System" select d).SingleOrDefault();
                     if (cbk != null)
                         member.ChangedMemberCallbacks = new MemberCallback[] { cbk };
                     else
                         member.ChangedMemberCallbacks = new MemberCallback[] { };
                 }
             }
             if (!udic.ContainsKey(e.FromID))
                 udic.Add(e.FromID, u);
             if (!udic.ContainsKey(e.ToID))
                 udic.Add(e.ToID, p);
         }
         else
         {
             msg = e;
             msg.User_FromID = u;
             msg.User_ToID = p;
         }
         ar.Add(GetJsonMessage(msg, userId, false));
     }
     return ar.ToArray();
 }
Esempio n. 2
0
        public static async Task <string[]> GetMessages(string noteHubId, string userId, string set, string qexpr, string prevlast)
        {
            JavaScriptSerializer jser = new JavaScriptSerializer();
            dynamic sobj = jser.DeserializeObject(set) as dynamic;
            DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion));
            DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(ShortMessage));
            var ser3 = new JavaScriptSerializer();

            System.IO.MemoryStream strm = new System.IO.MemoryStream();
            byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr);
            strm.Write(sbf, 0, sbf.Length);
            strm.Position = 0;
            var _qexpr = ser1.ReadObject(strm) as QueryExpresion;
            var svc    = new ShortMessageServiceProxy();
            var _set   = new ShortMessageSet();

            _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]);
            _set.PageSize_     = int.Parse(sobj["pageSize"]);
            if (!sobj.ContainsKey("setFilter"))
            {
                throw new Exception("The page is not properly parameterized!");
            }
            else
            {
                Func <string, string, int> count = (s, p) =>
                {
                    int _cnt = 0;
                    int i    = 0;
                    while ((i = s.IndexOf(p, i)) != -1)
                    {
                        _cnt++;
                        i += p.Length;
                    }
                    return(_cnt);
                };
                string filter = sobj["setFilter"];
                if (filter.EndsWith("&& ToID is not null && GroupID is null && ( ToID == \"{0}\" || FromID == \"{0}\" )") && count(filter, "||") == 1)
                {
                    filter         = string.Format(filter, userId);
                    _set.SetFilter = filter;
                }
                else
                {
                    throw new Exception("The page is not properly parameterized!");
                }
            }
            ShortMessage _prevlast = null;

            if (!string.IsNullOrEmpty(prevlast))
            {
                strm = new System.IO.MemoryStream();
                sbf  = System.Text.Encoding.UTF8.GetBytes(prevlast);
                strm.Write(sbf, 0, sbf.Length);
                strm.Position = 0;
                _prevlast     = ser2.ReadObject(strm) as ShortMessage;
            }
            var cntx   = Cntx;
            var result = await svc.GetPageItemsAsync(cntx, _set, _qexpr, _prevlast);

            var ar   = new List <string>();
            var udic = new Dictionary <string, User>();

            foreach (var e in result)
            {
                User         u, p;
                ShortMessage msg;
                if (!udic.TryGetValue(e.FromID, out u) || !udic.TryGetValue(e.ToID, out p))
                {
                    EntitySetType[] excludes = new EntitySetType[]
                    {
                        EntitySetType.UserGroup,
                        EntitySetType.ShortMessageAudience,
                        EntitySetType.ShortMessageAttachment,
                        EntitySetType.ShortMessage
                    };
                    EntitySetRelation[] drills = new EntitySetRelation[]
                    {
                        new EntitySetRelation
                        {
                            SetType     = EntitySetType.User,
                            RelatedSets = new EntitySetType[]
                            {
                                EntitySetType.UserAppMember,
                            }
                        }
                    };
                    msg = await svc.LoadEntityGraphRecursAsync(cntx, e.ID, excludes, drills);

                    u = msg.User_FromID;
                    p = msg.User_ToID;
                    {
                        var member = (from d in u.ChangedUserAppMembers where d.ApplicationID == ApplicationContext.App.ID select d).SingleOrDefault();
                        u.ChangedUserAppMembers = new UserAppMember[] { member };
                        if (member.ChangedMemberCallbacks != null && member.ChangedMemberCallbacks.Length > 0)
                        {
                            var cbk = (from d in member.ChangedMemberCallbacks where d.HubID == noteHubId && d.ChannelID == "System" select d).SingleOrDefault();
                            if (cbk != null)
                            {
                                member.ChangedMemberCallbacks = new MemberCallback[] { cbk }
                            }
                            ;
                            else
                            {
                                member.ChangedMemberCallbacks = new MemberCallback[] { }
                            };
                        }
                    }
                    {
                        var member = (from d in p.ChangedUserAppMembers where d.ApplicationID == ApplicationContext.App.ID select d).SingleOrDefault();
                        p.ChangedUserAppMembers = new UserAppMember[] { member };
                        if (member.ChangedMemberCallbacks != null && member.ChangedMemberCallbacks.Length > 0)
                        {
                            var cbk = (from d in member.ChangedMemberCallbacks where d.HubID == noteHubId && d.ChannelID == "System" select d).SingleOrDefault();
                            if (cbk != null)
                            {
                                member.ChangedMemberCallbacks = new MemberCallback[] { cbk }
                            }
                            ;
                            else
                            {
                                member.ChangedMemberCallbacks = new MemberCallback[] { }
                            };
                        }
                    }
                    if (!udic.ContainsKey(e.FromID))
                    {
                        udic.Add(e.FromID, u);
                    }
                    if (!udic.ContainsKey(e.ToID))
                    {
                        udic.Add(e.ToID, p);
                    }
                }
                else
                {
                    msg             = e;
                    msg.User_FromID = u;
                    msg.User_ToID   = p;
                }
                ar.Add(GetJsonMessage(msg, userId, false));
            }
            return(ar.ToArray());
        }
 public static async Task<string[]> GetMessages(string noteHubId, string userId, string set, string qexpr, string prevlast)
 {
     JavaScriptSerializer jser = new JavaScriptSerializer();
     dynamic sobj = jser.DeserializeObject(set) as dynamic;
     DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion));
     DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(ShortMessage));
     var ser3 = new JavaScriptSerializer();
     System.IO.MemoryStream strm = new System.IO.MemoryStream();
     byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr);
     strm.Write(sbf, 0, sbf.Length);
     strm.Position = 0;
     var _qexpr = ser1.ReadObject(strm) as QueryExpresion;
     var svc = new ShortMessageServiceProxy();
     var _set = new ShortMessageSet();
     _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]);
     _set.PageSize_ = int.Parse(sobj["pageSize"]);
     Dictionary<string, UserGroup> groupDic = new Dictionary<string, UserGroup>();
     if (!sobj.ContainsKey("setFilter"))
         throw new Exception("The page is not properly parameterized!");
     else
     {
         Func<string, string, int> count = (s, p) =>
         {
             int _cnt = 0;
             int i = 0;
             while ((i = s.IndexOf(p, i)) != -1)
             {
                 _cnt++;
                 i += p.Length;
             }
             return _cnt;
         };
         string filter = sobj["setFilter"];
         if (filter.Contains("ToID is null") && filter.Contains("___usergroups___") && count(filter, "||") == 0)
         {
             var mbgrps = await UserGroupChatGroups(userId);
             if (mbgrps == null || mbgrps.Length == 0)
                 throw new Exception(ResourceUtils.GetString("234038e6185f013e25d0213c06f5a0e9", "You are not a member of any chat group."));
             string groupexpr = "";
             foreach (var g in mbgrps)
             {
                 groupexpr += (groupexpr != "" ? " || " : "") + "GroupID == \"" + g.ID + "\"";
                 groupDic.Add(g.ID, g);
             }
             _set.SetFilter = filter.Replace("___usergroups___", groupexpr);
         }
         else
             throw new Exception("The page is not properly parameterized!");
     }
     ShortMessage _prevlast = null;
     if (!string.IsNullOrEmpty(prevlast))
     {
         strm = new System.IO.MemoryStream();
         sbf = System.Text.Encoding.UTF8.GetBytes(prevlast);
         strm.Write(sbf, 0, sbf.Length);
         strm.Position = 0;
         _prevlast = ser2.ReadObject(strm) as ShortMessage;
     }
     var cntx = Cntx;
     var result = await svc.GetPageItemsAsync(cntx, _set, _qexpr, _prevlast);
     var ar = new List<string>();
     var udic = new Dictionary<string, User>();
     foreach (var e in result)
     {
         User u;
         ShortMessage msg;
         if (!udic.TryGetValue(e.FromID, out u))
         {
             EntitySetType[] excludes = new EntitySetType[]
             {
                 EntitySetType.UserGroup,
                 EntitySetType.ShortMessageAudience,
                 EntitySetType.ShortMessageAttachment,
                 EntitySetType.ShortMessage
             };
             EntitySetRelation[] drills = new EntitySetRelation[]
             {
                 new EntitySetRelation
                 {
                     SetType = EntitySetType.User,
                     RelatedSets = new EntitySetType[] 
                     {
                         EntitySetType.UserAppMember,
                     }
                 }
             };
             msg = await svc.LoadEntityGraphRecursAsync(cntx, e.ID, excludes, drills);
             u = msg.User_FromID;
             var member = (from d in u.ChangedUserAppMembers where d.ApplicationID == ApplicationContext.App.ID select d).SingleOrDefault();
             u.ChangedUserAppMembers = new UserAppMember[] { member };
             if (member.ChangedMemberCallbacks != null && member.ChangedMemberCallbacks.Length > 0)
             {
                 var cbk = (from d in member.ChangedMemberCallbacks where d.HubID == noteHubId && d.ChannelID == "System" select d).SingleOrDefault();
                 if (cbk != null)
                     member.ChangedMemberCallbacks = new MemberCallback[] { cbk };
                 else
                     member.ChangedMemberCallbacks = new MemberCallback[] { };
             }
             udic.Add(e.FromID, u);
         }
         else
         {
             msg = e;
             msg.User_FromID = u;
         }
         ar.Add(GetJsonMessage(msg, userId, groupDic[e.GroupID], false));
     }
     return ar.ToArray();
 }
Esempio n. 4
0
        public static async Task <string[]> GetMessages(string noteHubId, string userId, string set, string qexpr, string prevlast)
        {
            JavaScriptSerializer jser = new JavaScriptSerializer();
            dynamic sobj = jser.DeserializeObject(set) as dynamic;
            DataContractJsonSerializer ser1 = new DataContractJsonSerializer(typeof(QueryExpresion));
            DataContractJsonSerializer ser2 = new DataContractJsonSerializer(typeof(ShortMessage));
            var ser3 = new JavaScriptSerializer();

            System.IO.MemoryStream strm = new System.IO.MemoryStream();
            byte[] sbf = System.Text.Encoding.UTF8.GetBytes(qexpr);
            strm.Write(sbf, 0, sbf.Length);
            strm.Position = 0;
            var _qexpr = ser1.ReadObject(strm) as QueryExpresion;
            var svc    = new ShortMessageServiceProxy();
            var _set   = new ShortMessageSet();

            _set.PageBlockSize = int.Parse(sobj["pageBlockSize"]);
            _set.PageSize_     = int.Parse(sobj["pageSize"]);
            Dictionary <string, UserGroup> groupDic = new Dictionary <string, UserGroup>();

            if (!sobj.ContainsKey("setFilter"))
            {
                throw new Exception("The page is not properly parameterized!");
            }
            else
            {
                Func <string, string, int> count = (s, p) =>
                {
                    int _cnt = 0;
                    int i    = 0;
                    while ((i = s.IndexOf(p, i)) != -1)
                    {
                        _cnt++;
                        i += p.Length;
                    }
                    return(_cnt);
                };
                string filter = sobj["setFilter"];
                if (filter.Contains("ToID is null") && filter.Contains("___usergroups___") && count(filter, "||") == 0)
                {
                    var mbgrps = await UserGroupChatGroups(userId);

                    if (mbgrps == null || mbgrps.Length == 0)
                    {
                        throw new Exception(ResourceUtils.GetString("234038e6185f013e25d0213c06f5a0e9", "You are not a member of any chat group."));
                    }
                    string groupexpr = "";
                    foreach (var g in mbgrps)
                    {
                        groupexpr += (groupexpr != "" ? " || " : "") + "GroupID == \"" + g.ID + "\"";
                        groupDic.Add(g.ID, g);
                    }
                    _set.SetFilter = filter.Replace("___usergroups___", groupexpr);
                }
                else
                {
                    throw new Exception("The page is not properly parameterized!");
                }
            }
            ShortMessage _prevlast = null;

            if (!string.IsNullOrEmpty(prevlast))
            {
                strm = new System.IO.MemoryStream();
                sbf  = System.Text.Encoding.UTF8.GetBytes(prevlast);
                strm.Write(sbf, 0, sbf.Length);
                strm.Position = 0;
                _prevlast     = ser2.ReadObject(strm) as ShortMessage;
            }
            var cntx   = Cntx;
            var result = await svc.GetPageItemsAsync(cntx, _set, _qexpr, _prevlast);

            var ar   = new List <string>();
            var udic = new Dictionary <string, User>();

            foreach (var e in result)
            {
                User         u;
                ShortMessage msg;
                if (!udic.TryGetValue(e.FromID, out u))
                {
                    EntitySetType[] excludes = new EntitySetType[]
                    {
                        EntitySetType.UserGroup,
                        EntitySetType.ShortMessageAudience,
                        EntitySetType.ShortMessageAttachment,
                        EntitySetType.ShortMessage
                    };
                    EntitySetRelation[] drills = new EntitySetRelation[]
                    {
                        new EntitySetRelation
                        {
                            SetType     = EntitySetType.User,
                            RelatedSets = new EntitySetType[]
                            {
                                EntitySetType.UserAppMember,
                            }
                        }
                    };
                    msg = await svc.LoadEntityGraphRecursAsync(cntx, e.ID, excludes, drills);

                    u = msg.User_FromID;
                    var member = (from d in u.ChangedUserAppMembers where d.ApplicationID == ApplicationContext.App.ID select d).SingleOrDefault();
                    u.ChangedUserAppMembers = new UserAppMember[] { member };
                    if (member.ChangedMemberCallbacks != null && member.ChangedMemberCallbacks.Length > 0)
                    {
                        var cbk = (from d in member.ChangedMemberCallbacks where d.HubID == noteHubId && d.ChannelID == "System" select d).SingleOrDefault();
                        if (cbk != null)
                        {
                            member.ChangedMemberCallbacks = new MemberCallback[] { cbk }
                        }
                        ;
                        else
                        {
                            member.ChangedMemberCallbacks = new MemberCallback[] { }
                        };
                    }
                    udic.Add(e.FromID, u);
                }
                else
                {
                    msg             = e;
                    msg.User_FromID = u;
                }
                ar.Add(GetJsonMessage(msg, userId, groupDic[e.GroupID], false));
            }
            return(ar.ToArray());
        }