コード例 #1
0
ファイル: MainWindow.cs プロジェクト: meltingice1337/MLRat
        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);
            }
        }
コード例 #2
0
ファイル: MainWindow.cs プロジェクト: meltingice1337/MLRat
        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);
        }
コード例 #3
0
ファイル: MainWindow.cs プロジェクト: meltingice1337/MLRat
        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);
        }
コード例 #4
0
ファイル: MainWindow.cs プロジェクト: meltingice1337/MLRat
 void OncontextAdd(MLPlugin _plugin, MLRatContextEntry[] entry)
 {
     foreach (MLRatContextEntry contextentry in entry)
     {
         AddSingleContext(_plugin, contextentry);
     }
 }
コード例 #5
0
ファイル: MainWindow.cs プロジェクト: meltingice1337/MLRat
        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);
            }
        }
コード例 #6
0
ファイル: MainWindow.cs プロジェクト: meltingice1337/MLRat
 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);
     }
 }
コード例 #7
0
ファイル: MainWindow.cs プロジェクト: meltingice1337/MLRat
 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);
     }
 }
コード例 #8
0
ファイル: MainWindow.cs プロジェクト: meltingice1337/MLRat
 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);
     }
 }
コード例 #9
0
ファイル: MainWindow.cs プロジェクト: pigeonhands/MLRat
 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);
     }
 }
コード例 #10
0
ファイル: MainWindow.cs プロジェクト: pigeonhands/MLRat
 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();
 }
コード例 #11
0
ファイル: MainWindow.cs プロジェクト: meltingice1337/MLRat
        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);
                }
            }
        }