Example #1
0
        public void Init()
        {
            var fuctory = new ModelFuctory();

            //プロクシ処理用クラス初期化
            try
            {
                DatProxy = new DatProxy(Appkey, HMkey, UserAgent1, UserAgent0, UserAgent2, RouninID, RouninPW, ProxyAddress)
                {
                    APIMediator   = fuctory.CreateAPIMediator(),
                    HtmlConverter = fuctory.CreateHtmlConverter()
                };
            }
            catch (System.IO.FileLoadException)
            {
                using (TaskTrayIcon)
                {
                    System.Windows.MessageBox.Show("FiddlerCore4.dllのバージョンが違うか必要なdllが無いようです。zipファイルに同梱のすべてのdllを上書きコピーしてください。", "dll読み込みエラー");
                    Microsoft.Win32.SystemEvents.PowerModeChanged -= new Microsoft.Win32.PowerModeChangedEventHandler(PowermodeChanged);
                    System.Windows.Application.Current.Shutdown();
                    return;
                }
            }
            //書き込み板毎設定の読み込み
            if (File.Exists("./BoardSettings.yaml"))
            {
                using (var stream = File.OpenText("./BoardSettings.yaml"))
                {
                    try
                    {
                        var deserializer = new YamlDotNet.Serialization.Deserializer();
                        DatProxy.BoardSettings = deserializer.Deserialize <Dictionary <string, BoardSettings> >(stream);
                    }
                    catch (Exception err)
                    {
                        this.SystemLog = "YAMLファイルの書式が間違っているようです。\n" + err.ToString();
                    }
                }
            }
            DatProxy.BoardSettings ??= new Dictionary <string, BoardSettings>();
            this.SystemLog = $"{DatProxy.BoardSettings.Count()}板分の設定を読み込みました。";
            if (DatProxy.BoardSettings.ContainsKey("2chapiproxy_default") == false)
            {
                // ファイルが無いかデフォルト設定が無い時、JaneStyleの設定を使用
                var def = new BoardSettings {
                    UserAgent = "Monazilla/1.00 JaneStyle/4.00 Windows/10.0.19041", SetOekaki = false, KeepAlive = false
                };
                def.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
                def.Headers.Add("Accept-Encoding", "gzip, identity");
                def.Headers.Add("ContentType", "application/x-www-form-urlencoded");
                DatProxy.BoardSettings.Add("2chapiproxy_default", def);
                this.SystemLog = "書き込みのデフォルト設定としてJaneStyleのものを使用します";
            }

            //外部コードのコンパイル
            if (CEExternalRead)
            {
                CEResultView = DatProxy.HtmlConverter.Compile(CESrcfilePath);
            }

            //設定の適用、プロクシクラス
            DatProxy.AllowWANAccese  = WANAccess;
            DatProxy.user            = WANID;
            DatProxy.pw              = WANPW;
            DatProxy.WriteUA         = UserAgent3;
            DatProxy.GetHTML         = KakotoHTML;
            DatProxy.OfflawRokkaPerm = OfflawRokkaPermutation;
            DatProxy.CangeUARetry    = ChangeUARetry;
            DatProxy.SocksPoxy       = Socks4aProxy;
            DatProxy.gZipRes         = gZipResponse;
            DatProxy.ChunkRes        = ChunkedResponse;
            DatProxy.OnlyORPerm      = OnlyORPerm;
            DatProxy.CRReplace       = CRReplace;
            DatProxy.KakolinkPerm    = KakolinkPermutation;
            DatProxy.AllUAReplace    = (UserAgent3 == "") ? (false) : (AllUAReplace);
            DatProxy.BeLogin         = BeLogin;
            DatProxy.SetReferrer     = SetReferrer;

            //設定の適用、APIアクセスクラス
            DatProxy.APIMediator.AppKey       = this.Appkey;
            DatProxy.APIMediator.HMKey        = this.HMkey;
            DatProxy.APIMediator.SidUA        = this.UserAgent0;
            DatProxy.APIMediator.X2chUA       = this.UserAgent1;
            DatProxy.APIMediator.DatUA        = this.UserAgent2;
            DatProxy.APIMediator.RouninID     = this.RouninID;
            DatProxy.APIMediator.RouninPW     = this.RouninPW;
            DatProxy.APIMediator.ProxyAddress = this.ProxyAddress;
            DatProxy.UpdateAsync();

            //設定の適用、html変換クラス
            DatProxy.HtmlConverter.UserAgent              = _UserAgent4;
            DatProxy.HtmlConverter.ProxyAddress           = _ProxyAddress;
            DatProxy.HtmlConverter.IsDifferenceDetect     = !_AllReturn;
            DatProxy.HtmlConverter.IsAliveCheckSkip       = _SkipAliveCheck;
            DatProxy.HtmlConverter.Is5chURIReplace        = _Replace5chURI;
            DatProxy.HtmlConverter.IsHttpsReplace         = _ReplaceHttpsLink;
            DatProxy.HtmlConverter.IsExternalConverterUse = _CEExternalRead;

            //エラー通知用コールバック登録
            DatProxy.APIMediator.PropertyChanged += (sender, e) =>
            {
                if (e.PropertyName == nameof(DatProxy.APIMediator.CurrentError))
                {
                    //ここで取得しておく
                    string error = DatProxy.APIMediator.CurrentError;

                    App.Current.Dispatcher.BeginInvoke((Action)(() =>
                    {
                        this.SystemLog = error;
                    }));
                }
            };

            DatProxy.HtmlConverter.PropertyChanged += (sender, e) =>
            {
                if (e.PropertyName == nameof(DatProxy.HtmlConverter.CurrentError))
                {
                    //ここで取得しておく
                    string error = DatProxy.HtmlConverter.CurrentError;

                    App.Current.Dispatcher.BeginInvoke((Action)(() =>
                    {
                        this.SystemLog = error;
                    }));
                }
            };

            //自動開始処理
            if (Setting.AutoStart)
            {
                int pnum = (Setting.AutoSelect) ? (0) : (Setting.PortNumber);
                pnum = DatProxy.Start(pnum);
                if (pnum != 0)
                {
                    SystemLog  = "開始、ポート番号:" + pnum;
                    NowStart   = true;
                    PortNumber = pnum;
                }
                else
                {
                    SystemLog = "既に使用中のポートみたいです、別のポートを指定して下さい。";
                    DatProxy.End();
                }
            }
            //同時起動と終了を設定
            if (!String.IsNullOrEmpty(Setting.SenburaPath))
            {
                bool kage = true;
                System.Diagnostics.Process p = new System.Diagnostics.Process();
                p.StartInfo.FileName = Setting.SenburaPath;
                if (System.IO.Path.GetFileName(Setting.SenburaPath) != "kage.exe")
                {
                    kage = false;
                    p.EnableRaisingEvents = true;
                    p.Exited += (sender, e) =>
                    {
                        App.Current.Dispatcher.BeginInvoke((Action)(() => { if (Setting.SyncEnd)
                                                                            {
                                                                                BeforeShutdown();
                                                                            }
                                                                    }), null);
                    };
                }
                try
                {
                    p.Start();
                    m_SenburaPID = p.Id;
                    SystemLog    = Setting.SenburaPath + " を起動";
                    m_SyncStart  = true;
                    //かちゅ~しゃの場合の終了同期処理の追加
                    if (kage)
                    {
                        System.Diagnostics.Process[] plist = null;
                        for (int i = 0; i < 50; ++i)
                        {
                            plist = System.Diagnostics.Process.GetProcessesByName("Katjusha");
                            if (plist.Length != 0)
                            {
                                break;
                            }
                            System.Threading.Thread.Sleep(100);
                        }
                        plist[0].EnableRaisingEvents = true;
                        plist[0].Exited += (sender, e) =>
                        {
                            App.Current.Dispatcher.BeginInvoke((Action)(() => { if (Setting.SyncEnd)
                                                                                {
                                                                                    BeforeShutdown();
                                                                                }
                                                                        }), null);
                        };
                        m_SenburaPID = plist[0].Id;
                    }
                }
                catch (Exception err)
                {
                    SystemLog = Setting.SenburaPath + " の起動に失敗\n" + err.ToString();
                }
            }
            Setting.change = false;
            //プロセス間通信のサーバ登録
            try
            {
                IpcServerChannel server = new IpcServerChannel("2chApiProxyIPC");
                ChannelServices.RegisterChannel(server, true);
                RemoteObject         = new SendObject();
                SendObject.OnTrance += new SendObject.CallEventHandler((e) =>
                {
                    if (RemoteObject.first)
                    {
                        RemoteObject.first = false;
                        App.Current.Dispatcher.BeginInvoke((Action)(() => { if (e)
                                                                            {
                                                                                ActivateWindow();
                                                                            }
                                                                    }));
                    }
                    else
                    {
                        RemoteObject.first = true;
                    }
                });
                RemotingConfiguration.RegisterWellKnownServiceType(typeof(SendObject), "ShowWindow", WellKnownObjectMode.Singleton);
            }
            catch (Exception) { }
            SystemLog = "2chAPIProxy起動";
        }
Example #2
0
        public void Init()
        {
            var fuctory = new ModelFuctory();

            //プロクシ処理用クラス初期化
            try
            {
                DatProxy = new DatProxy(Appkey, HMkey, UserAgent1, UserAgent0, UserAgent2, RouninID, RouninPW, ProxyAddress)
                {
                    APIMediator   = fuctory.CreateAPIMediator(),
                    HtmlConverter = fuctory.CreateHtmlConverter()
                };
            }
            catch (System.IO.FileLoadException)
            {
                using (TaskTrayIcon)
                {
                    System.Windows.MessageBox.Show("FiddlerCore4.dllのバージョンが違うか必要なdllが無いようです。zipファイルに同梱のすべてのdllを上書きコピーしてください。", "dll読み込みエラー");
                    Microsoft.Win32.SystemEvents.PowerModeChanged -= new Microsoft.Win32.PowerModeChangedEventHandler(PowermodeChanged);
                    System.Windows.Application.Current.Shutdown();
                    return;
                }
            }
            //書き込みヘッダ定義ファイルの読み込み
            Dictionary <String, String> header = new Dictionary <string, string>();

            if (File.Exists("./WriteRequestHeader.txt"))
            {
                using (StreamReader sr = new StreamReader("./WriteRequestHeader.txt", System.Text.Encoding.UTF8))
                {
                    while (sr.EndOfStream == false)
                    {
                        try
                        {
                            string line = sr.ReadLine();
                            if (line.IndexOf("//") == 0 || string.IsNullOrEmpty(line) == true)
                            {
                                continue;
                            }
                            var pair = line.Split(':');
                            if (pair.Length == 0)
                            {
                                continue;
                            }
                            if (pair.Length == 1)
                            {
                                header.Add(pair[0], "");
                            }
                            else
                            {
                                header.Add(pair[0], pair[1]);
                            }
                        }
                        catch (Exception err)
                        {
                            System.Diagnostics.Debug.WriteLine("●ヘッダ定義の読み込み中のエラー\n" + err.ToString());
                        }
                    }
                }
            }
            DatProxy.WriteHeader = header;
            if (header.Count == 0)
            {
                this.SystemLog = "書き込み時には内部定義ヘッダを使用します";
            }
            else
            {
                this.SystemLog = "書き込み時には外部定義ヘッダを使用します";
            }

            //外部コードのコンパイル
            if (CEExternalRead)
            {
                CEResultView = DatProxy.HtmlConverter.Compile(CESrcfilePath);
            }

            //設定の適用、プロクシクラス
            DatProxy.AllowWANAccese  = WANAccess;
            DatProxy.user            = WANID;
            DatProxy.pw              = WANPW;
            DatProxy.WriteUA         = UserAgent3;
            DatProxy.GetHTML         = KakotoHTML;
            DatProxy.OfflawRokkaPerm = OfflawRokkaPermutation;
            DatProxy.CangeUARetry    = ChangeUARetry;
            DatProxy.SocksPoxy       = Socks4aProxy;
            DatProxy.gZipRes         = gZipResponse;
            DatProxy.ChunkRes        = ChunkedResponse;
            DatProxy.OnlyORPerm      = OnlyORPerm;
            DatProxy.CRReplace       = CRReplace;
            DatProxy.KakolinkPerm    = KakolinkPermutation;
            DatProxy.AllUAReplace    = (UserAgent3 == "") ? (false) : (AllUAReplace);
            DatProxy.BeLogin         = BeLogin;

            //設定の適用、APIアクセスクラス
            DatProxy.APIMediator.AppKey       = this.Appkey;
            DatProxy.APIMediator.HMKey        = this.HMkey;
            DatProxy.APIMediator.SidUA        = this.UserAgent0;
            DatProxy.APIMediator.X2chUA       = this.UserAgent1;
            DatProxy.APIMediator.DatUA        = this.UserAgent2;
            DatProxy.APIMediator.RouninID     = this.RouninID;
            DatProxy.APIMediator.RouninPW     = this.RouninPW;
            DatProxy.APIMediator.ProxyAddress = this.ProxyAddress;
            DatProxy.UpdateAsync();

            //設定の適用、html変換クラス
            DatProxy.HtmlConverter.UserAgent              = _UserAgent4;
            DatProxy.HtmlConverter.ProxyAddress           = _ProxyAddress;
            DatProxy.HtmlConverter.IsDifferenceDetect     = !_AllReturn;
            DatProxy.HtmlConverter.IsAliveCheckSkip       = _SkipAliveCheck;
            DatProxy.HtmlConverter.Is5chURIReplace        = _Replace5chURI;
            DatProxy.HtmlConverter.IsHttpsReplace         = _ReplaceHttpsLink;
            DatProxy.HtmlConverter.IsExternalConverterUse = _CEExternalRead;

            //エラー通知用コールバック登録
            DatProxy.APIMediator.PropertyChanged += (sender, e) =>
            {
                if (e.PropertyName == nameof(DatProxy.APIMediator.CurrentError))
                {
                    //ここで取得しておく
                    string error = DatProxy.APIMediator.CurrentError;

                    App.Current.Dispatcher.BeginInvoke((Action)(() =>
                    {
                        this.SystemLog = error;
                    }));
                }
            };

            DatProxy.HtmlConverter.PropertyChanged += (sender, e) =>
            {
                if (e.PropertyName == nameof(DatProxy.HtmlConverter.CurrentError))
                {
                    //ここで取得しておく
                    string error = DatProxy.HtmlConverter.CurrentError;

                    App.Current.Dispatcher.BeginInvoke((Action)(() =>
                    {
                        this.SystemLog = error;
                    }));
                }
            };

            //自動開始処理
            if (Setting.AutoStart)
            {
                int pnum = (Setting.AutoSelect) ? (0) : (Setting.PortNumber);
                pnum = DatProxy.Start(pnum);
                if (pnum != 0)
                {
                    SystemLog  = "開始、ポート番号:" + pnum;
                    NowStart   = true;
                    PortNumber = pnum;
                }
                else
                {
                    SystemLog = "既に使用中のポートみたいです、別のポートを指定して下さい。";
                    DatProxy.End();
                }
            }
            //同時起動と終了を設定
            if (!String.IsNullOrEmpty(Setting.SenburaPath))
            {
                bool kage = true;
                System.Diagnostics.Process p = new System.Diagnostics.Process();
                p.StartInfo.FileName = Setting.SenburaPath;
                if (System.IO.Path.GetFileName(Setting.SenburaPath) != "kage.exe")
                {
                    kage = false;
                    p.EnableRaisingEvents = true;
                    p.Exited += (sender, e) =>
                    {
                        App.Current.Dispatcher.BeginInvoke((Action)(() => { if (Setting.SyncEnd)
                                                                            {
                                                                                BeforeShutdown();
                                                                            }
                                                                    }), null);
                    };
                }
                try
                {
                    p.Start();
                    m_SenburaPID = p.Id;
                    SystemLog    = Setting.SenburaPath + " を起動";
                    m_SyncStart  = true;
                    //かちゅ~しゃの場合の終了同期処理の追加
                    if (kage)
                    {
                        System.Diagnostics.Process[] plist = null;
                        for (int i = 0; i < 50; ++i)
                        {
                            plist = System.Diagnostics.Process.GetProcessesByName("Katjusha");
                            if (plist.Length != 0)
                            {
                                break;
                            }
                            System.Threading.Thread.Sleep(100);
                        }
                        plist[0].EnableRaisingEvents = true;
                        plist[0].Exited += (sender, e) =>
                        {
                            App.Current.Dispatcher.BeginInvoke((Action)(() => { if (Setting.SyncEnd)
                                                                                {
                                                                                    BeforeShutdown();
                                                                                }
                                                                        }), null);
                        };
                        m_SenburaPID = plist[0].Id;
                    }
                }
                catch (Exception err)
                {
                    SystemLog = Setting.SenburaPath + " の起動に失敗\n" + err.ToString();
                }
            }
            Setting.change = false;
            //プロセス間通信のサーバ登録
            try
            {
                IpcServerChannel server = new IpcServerChannel("2chApiProxyIPC");
                ChannelServices.RegisterChannel(server, true);
                RemoteObject         = new SendObject();
                SendObject.OnTrance += new SendObject.CallEventHandler((e) =>
                {
                    if (RemoteObject.first)
                    {
                        RemoteObject.first = false;
                        App.Current.Dispatcher.BeginInvoke((Action)(() => { if (e)
                                                                            {
                                                                                ActivateWindow();
                                                                            }
                                                                    }));
                    }
                    else
                    {
                        RemoteObject.first = true;
                    }
                });
                RemotingConfiguration.RegisterWellKnownServiceType(typeof(SendObject), "ShowWindow", WellKnownObjectMode.Singleton);
            }
            catch (Exception) { }
            SystemLog = "2chAPIProxy起動";
        }