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); }
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())); } } }
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); } }
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); }
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 }
public static string GetObjectSignature(this Core.Object @object) => string.Format("OBJECT {0} {1} {2}", @object.Type.AsString(), @object.ID, @object.Name);
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(); } }