Exemple #1
0
        public void Test()
        {
            var obj = new Core.Object();
            obj.Changed += delegate { _modified = true; };
            AssertModified(obj, false);

            obj.Name = "Test";
            AssertModified(obj, true);

            obj.Guid = Guid.Empty;
            AssertModified(obj, false);

            obj.Connected = true;
            AssertModified(obj, true);

            var parent = new Core.Object {Guid = Guid.NewGuid()};

            Assert.AreEqual(Guid.Empty, obj.ParentGuid);
            obj.Parent = parent;
            Assert.AreEqual(parent.Guid, obj.ParentGuid);
            obj.Parent = null;
            Assert.AreEqual(Guid.Empty, obj.ParentGuid);

            AssertModified(obj, false);
        }
 public static void ClearTimer(Core.Object owner, TimerCallback callback)
 {
     if (owner.IsDestroyedOrPendingKill)
     {
         throw new UnrealObjectDestroyedException("Trying to set timer on destroyed object");
     }
     if (null == callback)
     {
         throw new ArgumentNullException("callback");
     }
     //TODO: support non-UFunction timer delegates
     SystemLibrary.ClearTimer(owner, callback.Method.Name);
 }
Exemple #3
0
        public void Test()
        {
            var parent = new Core.Objects();
            parent.Added += delegate { _childAdded = true; };
            parent.Guid = Guid.NewGuid();

            AssertChildAdded(false);

            var obj = new Core.Object();
            Assert.AreEqual(Guid.Empty, obj.ParentGuid);
            parent.Add(obj);

            AssertChildAdded(true);
            Assert.AreEqual(parent.Guid, obj.ParentGuid);
        }
        private void CreateRecursive(Core.Object obj, HttpResponse response)
        {
            if (_createdControls.Contains(obj))
            {
                return;
            }
            _createdControls.Add(obj);
            var st = obj.GetState();

            obj.Render(st);

            var props = st.GetAllProperies();

            foreach (var p in props)
            {
                if (p.Value is qxDotNet.Core.Object)
                {
                    CreateRecursive(p.Value as qxDotNet.Core.Object, response);
                }
            }

            var children = obj.GetChildren(false);

            if (children != null)
            {
                foreach (var item in children)
                {
                    if (item != null)
                    {
                        CreateRecursive((item as Core.Object), response);
                    }
                }
            }

            if (!obj.DisallowCreation && (_isRefreshRequest || !obj.IsCreated))
            {
                if (!_registeredControls.ContainsKey(obj.clientId))
                {
                    _registeredControls.Add(obj.clientId, new WeakReference(obj));
                }
                var typeName = obj.GetTypeName();
                if (typeName != null)
                {
                    response.Write(string.Format("{0} = new {1}({2});\n", obj.GetReference(), typeName, obj.GetCustomConstructor()));
                }
            }
        }
Exemple #5
0
        static void CreateNode(Core.Object obj, TreeNode parent, TreeView root)
        {
            TreeNode node = new TreeNode();

            node.Text = obj.Name ?? obj.GetType().Name;
            node.Tag  = obj;
            if (parent != null)
            {
                parent.Nodes.Add(node);
            }
            else
            {
                root.Nodes.Add(node);
            }

            foreach (var child in obj.Children)
            {
                CreateNode(child, node, root);
            }
        }
Exemple #6
0
        public T Get <T>() where T : Component, new()
        {
            T com = GetComponentFromChildren <T>();

            if (!com)
            {
                var       attrs = typeof(T).GetCustomAttributes(typeof(AddOption), true);
                AddOption attr  = (AddOption)attrs[0];

                Core.Object child = FindChildByName(attr.Cate);

                if (!child)
                {
                    child      = new Object();
                    child.Name = attr.Cate;
                    Children.Add(child);
                }
                com = child.AddComponent <T>();
            }
            return(com);
        }
Exemple #7
0
        void OnMessage(IWebSocketConnection aContext, string aMessage)
        {
            Log.Info("OnMessage(" + aContext.ConnectionInfo.ClientIpAddress + ", " + aMessage + ")");

            var currentUser = (from user in _users where user.Connection == aContext select user).SingleOrDefault();
            var request = JsonConvert.DeserializeObject<Request>(aMessage);
            #if !UNSAFE
            try
            {
            #endif
                // no pass, no way
                if (request.Password != Password)
                {
                    Log.Error("OnMessage(" + aContext.ConnectionInfo.ClientIpAddress + ") bad password");
                    // exit
                    return;
                }

                switch (request.Type)
                {
                    case Request.Types.AddServer:
                        AddServer(request.Name);
                        break;

                    case Request.Types.RemoveServer:
                        RemoveServer(request.Guid);
                        break;

                    case Request.Types.AddChannel:
                        AddChannel(request.Guid, request.Name);
                        break;

                    case Request.Types.RemoveChannel:
                        RemoveChannel(request.Guid);
                        break;

                    case Request.Types.ActivateObject:
                        ActivateObject(request.Guid);
                        break;

                    case Request.Types.DeactivateObject:
                        DeactivateObject(request.Guid);
                        break;

                    case Request.Types.Search:
                        var packets = FilteredPackets(AllPackets(request.IgnoreOfflineBots), request.Guid);
                        UnicastBlock(currentUser, "Packet", packets);

                        var bots = DistinctBots(packets);
                        UnicastBlock(currentUser, "Bot", bots);

                        currentUser.IgnoreOfflineBots = request.IgnoreOfflineBots;
                        currentUser.LastSearch = request.Guid;
                        currentUser.LastLoadedBots = bots;
                        currentUser.LastViewedBot = Guid.Empty;
                        currentUser.LastLoadedPackets = packets;
                        break;

                    case Request.Types.SearchExternal:
                        var searchExternal = Searches.WithGuid(request.Guid);
                        if (searchExternal != null)
                        {
                            ExternalSearch[] results = new ExternalSearch[0];
                            try
                            {
                                var uri = new Uri("http://xg.bitpir.at/index.php?show=search&action=external&search=" + searchExternal.Name + "&xg=" + Settings.Instance.XgVersion);
                                var req = HttpWebRequest.Create(uri);

                                var response = req.GetResponse();
                                StreamReader sr = new StreamReader(response.GetResponseStream());
                                string text = sr.ReadToEnd();
                                response.Close();

                                results = JsonConvert.DeserializeObject<ExternalSearch[]>(text, JsonSerializerSettings);
                            }
                            catch (Exception ex)
                            {
                                Log.Fatal("OnMessage() cant load external search for " + searchExternal.Name, ex);
                            }

                            Unicast(currentUser, new Response
                            {
                                Type = Response.Types.SearchExternal,
                                Data = results
                            });
                        }
                        break;

                    case Request.Types.AddSearch:
                        string name = request.Name;
                        var obj = Searches.Named(name);
                        if (obj == null)
                        {
                            obj = new Core.Object {Name = name};
                            Searches.Add(obj);
                        }
                        break;

                    case Request.Types.RemoveSearch:
                        var search = Searches.WithGuid(request.Guid);
                        if (search != null)
                        {
                            foreach (var user in _users)
                            {
                                if (user.LastSearch == request.Guid)
                                {
                                    user.LastSearch = Guid.Empty;
                                }
                            }

                            Searches.Remove(search);
                        }
                        break;

                    case Request.Types.Searches:
                        var searches = new List<Core.Object>();
                        searches.Add(_search0Day);
                        searches.Add(_search0Week);
                        searches.Add(_searchDownloads);
                        searches.Add(_searchEnabled);
                        searches.AddRange(Searches.All);

                        Unicast(currentUser, new Response
                        {
                            Type = Response.Types.Searches,
                            Data = searches
                        });
                        break;

                    case Request.Types.Servers:
                        UnicastBlock(currentUser, "Server", Servers.All);
                        break;

                    case Request.Types.ChannelsFromServer:
                        var channels = (from server in Servers.All from channel in server.Channels where channel.ParentGuid == request.Guid select channel).ToList();
                        UnicastBlock(currentUser, "Channel", channels);

                        currentUser.LastViewedServer = request.Guid;
                        currentUser.LastLoadedChannels = channels;
                        break;

                    case Request.Types.PacketsFromBot:
                        var botPackets = (from server in Servers.All
                                        from channel in server.Channels
                                        from bot in channel.Bots
                                        from packet in bot.Packets
                                        where packet.ParentGuid == request.Guid
                                        select packet).ToList();
                        UnicastBlock(currentUser, "Packet", botPackets);

                        currentUser.LastViewedBot = request.Guid;
                        currentUser.LastLoadedPackets = botPackets;
                        break;

                    case Request.Types.Statistics:
                        //response = Statistic2Json();
                        break;

                    case Request.Types.Snapshots:
                        Unicast(currentUser, new Response
                        {
                            Type = Response.Types.Snapshots,
                            Data = Snapshots2Flot(Snapshots)
                        });
                        break;

                    case Request.Types.Files:
                        UnicastBlock(currentUser, "File", Files.All);
                        break;

                    case Request.Types.CloseServer:
                        break;

                    case Request.Types.ParseXdccLink:
                        string[] link = request.Name.Substring(7).Split('/');
                        string serverName = link[0];
                        string channelName = link[2];
                        string botName = link[3];
                        int packetId = int.Parse(link[4].Substring(1));

                        // checking server
                        Core.Server serv = Servers.Server(serverName);
                        if (serv == null)
                        {
                            Servers.Add(serverName);
                            serv = Servers.Server(serverName);
                        }
                        serv.Enabled = true;

                        // checking channel
                        Channel chan = serv.Channel(channelName);
                        if (chan == null)
                        {
                            serv.AddChannel(channelName);
                            chan = serv.Channel(channelName);
                        }
                        chan.Enabled = true;

                        // checking bot
                        Bot tBot = chan.Bot(botName);
                        if (tBot == null)
                        {
                            tBot = new Bot {Name = botName};
                            chan.AddBot(tBot);
                        }

                        // checking packet
                        Packet pack = tBot.Packet(packetId);
                        if (pack == null)
                        {
                            pack = new Packet {Id = packetId, Name = link[5]};
                            tBot.AddPacket(pack);
                        }
                        pack.Enabled = true;
                        break;
                }
            #if !UNSAFE
            }
            catch (Exception ex)
            {
                Log.Fatal("OnMessage(" + aContext.ConnectionInfo.ClientIpAddress + ", " + aMessage + ")", ex);
            }
            #endif
        }
Exemple #8
0
 public static string GetObjectSignature(this Core.Object @object) =>
 string.Format("OBJECT {0} {1} {2}", @object.Type.AsString(), @object.ID, @object.Name);
Exemple #9
0
 protected void SetObjectProperties(Core.Object @object)
 {
     @object.ObjectProperties.DateTime    = DateTime;
     @object.ObjectProperties.Modified    = Modified;
     @object.ObjectProperties.VersionList = VersionList;
 }
        private void RenderRecursive(Core.Object obj, HttpResponse response)
        {
            if (obj.GetTypeName() == null)
            {
                obj.CustomPreRender(response, _isRefreshRequest);
                obj.CustomPostRender(response, _isRefreshRequest);
                return;
            }
            var stateBag = obj.GetState();
            Dictionary <string, object>  properties;
            List <Core.Object.EventInfo> events;
            var st = obj.GetState();

            if (_isRefreshRequest || !obj.IsCreated)
            {
                properties = st.GetAllProperies();
                events     = st.GetAllEvents();
            }
            else
            {
                properties = st.GetNewProperties();
                events     = st.GetNewEvents();
            }

            obj.CustomPreRender(response, _isRefreshRequest);

            if (!_isRefreshRequest)
            {
                var removed = obj.GetRemovedChildren();
                if (removed != null)
                {
                    foreach (Core.Object item in removed)
                    {
                        if (item.GetTypeName() != null)
                        {
                            response.Write(obj.GetRemoveObjectReference(item));
                        }
                    }
                }
            }

            var children    = obj.GetChildren(!_isRefreshRequest);
            var newChildren = children;

            // font hack
            var fontList = new List <qxDotNet.Font>();

            foreach (var p in st.GetAllProperies())
            {
                if (p.Value is qxDotNet.Font)
                {
                    (p.Value as qxDotNet.Font).fontRenderPhase = false;
                    RenderRecursive(p.Value as qxDotNet.Core.Object, response);
                    (p.Value as qxDotNet.Font).fontRenderPhase = true;
                    fontList.Add(p.Value as qxDotNet.Font);
                }
            }

            children = obj.GetChildren(false);


            foreach (var p in st.GetAllProperies())
            {
                if (p.Value is qxDotNet.Core.Object)
                {
                    RenderRecursive(p.Value as qxDotNet.Core.Object, response);
                    _renderedControls.Add(p.Value as qxDotNet.Core.Object);
                }
            }

            if (children != null)
            {
                foreach (var item in children)
                {
                    if (item != null)
                    {
                        if (!_renderedControls.Contains(item as Core.Object))
                        {
                            RenderRecursive((item as Core.Object), response);
                        }
                    }
                }
            }

            if (newChildren != null)
            {
                foreach (Core.Object item in newChildren)
                {
                    if (item != null)
                    {
                        if (!item.DisallowCreation && item.GetTypeName() != null)
                        {
                            response.Write(obj.GetAddObjectReference(item));
                        }
                    }
                }
            }

            if (obj is qxDotNet.Font)
            {
                //font hack
                foreach (var prop in properties)
                {
                    var fontObj = obj as qxDotNet.Font;
                    if (prop.Key == "size")
                    {
                        if (!fontObj.fontRenderPhase)
                        {
                            continue;
                        }
                    }
                    else
                    {
                        if (fontObj.fontRenderPhase)
                        {
                            continue;
                        }
                    }
                    response.Write(obj.GetSetPropertyValueExpression(prop.Key, prop.Value));
                }
            }
            else
            {
                foreach (var prop in properties)
                {
                    response.Write(obj.GetSetPropertyValueExpression(prop.Key, prop.Value));
                }
            }


            // font hack
            foreach (var item in fontList)
            {
                RenderRecursive(item as qxDotNet.Core.Object, response);
            }

            foreach (var ev in events)
            {
                if (!_isRefreshRequest && ev.IsEventSent)
                {
                    continue;
                }
                response.Write(obj.GetReference() + ".addListener(\"" + ev.name + "\", function(e) {");
                if (!string.IsNullOrEmpty(ev.CustomEventCondition))
                {
                    response.Write("if (" + ev.CustomEventCondition + ") {\n");
                }
                if (ev.modifiedProperies.Count == 0)
                {
                    response.Write("App.ev(" + obj.clientId + ", \"" + ev.name + "\", null);\n");
                }
                else
                {
                    var props = "";
                    foreach (var item in ev.modifiedProperies)
                    {
                        if (ev.referencedProperies.Contains(item))
                        {
                            props += ".pr(\"" + item + "\",";
                            props += "\"" + obj.GetGetPropertyAccessor(item, true) + "\"";
                            props += ")";
                        }
                        else
                        {
                            props += ".pr(\"" + item + "\",";
                            props += "\"" + obj.GetGetPropertyAccessor(item, false) + "\"";
                            props += ")";
                        }
                    }
                    response.Write("App.ev(" + obj.clientId + ", \"" + ev.name + "\")" + props + ";");
                }
                if (ev.callServer)
                {
                    response.Write(ev.CustomCallServerExpression);
                }
                if (!string.IsNullOrEmpty(ev.CustomEventCondition))
                {
                    response.Write("}\n");
                }
                response.Write("});\n");
                ev.IsEventSent = true;
            }

            obj.CustomPostRender(response, _isRefreshRequest);

            if (!(obj is qxDotNet.Font) || (obj as qxDotNet.Font).fontRenderPhase)
            {
                obj.Commit();
            }
        }