private static void AddMask(string ReadMask, string WriteMask)
        {
            if (Multithread)
            {
                MskRld.Add(ReadMask, WriteMask);
                return;
            }

            PipeWriter.Write((byte)PipeCommands.AddMask);
            PipeWriter.Write(ReadMask);
            PipeWriter.Write(WriteMask);
            PipeWriter.Flush();
        }
        private static void Service(string ServiceName)
        {
            StrRld = CreateDictionary();
            MskRld = CreateDictionary();
            Missed = new List <string>();

            NamedPipeServerStream Server = new NamedPipeServerStream(ServiceName, PipeDirection.InOut, 2, PipeTransmissionMode.Byte);

            Server.WaitForConnection();

            BinaryReader Reader = new BinaryReader(Server);
            BinaryWriter Writer = new BinaryWriter(Server);

            bool OK = true;

            while (Server.IsConnected)
            {
                PipeCommands Command = (PipeCommands)Reader.ReadByte();
                Log("Command Recived: {0}", true, Command.ToString());
                switch (Command)
                {
                case PipeCommands.AddReload:
                    OK = true;
                    string Original = Reader.ReadString();
                    string Reloader = Reader.ReadString();
                    if (!StrRld.ContainsKey(Original) || AllowDuplicates)
                    {
                        StrRld.Add(Original, Reloader);
                    }
                    Log("Command Finished, In: {0}, Out: {1}", true, 2, 0);
                    break;

                case PipeCommands.FindReload:
                    OK = true;
                    bool   Enforce = Reader.ReadByte() == (byte)PipeCommands.True;
                    string Key     = Reader.ReadString();

                    if (StrRld.ContainsKey(Key))
                    {
                        Writer.Write((byte)PipeCommands.True);
                    }
                    else if (Enforce)
                    {
                        Writer.Write((byte)PipeCommands.False);
                    }
                    else if ((from x in Databases where x.ContainsKey(Key) select x).Count() > 0)
                    {
                        Writer.Write((byte)PipeCommands.True);
                    }
                    else
                    {
                        Writer.Write((byte)PipeCommands.False);
                    }

                    Writer.Flush();
                    Log("Command Finished, In: {0}, Out: {1}", true, 2, 1);
                    break;

                case PipeCommands.GetReload:
                    OK = true;
                    string RLD = Reader.ReadString();
                    try {
                        string Rst = null;
                        if (StrRld.ContainsKey(RLD))
                        {
                            Rst = StrRld[RLD];
                        }
                        else
                        {
                            for (DBID = 0; DBID < Databases.Count; DBID++)
                            {
                                if (StrRld.ContainsKey(RLD))
                                {
                                    Rst = StrRld[RLD];
                                    break;
                                }
                            }
                        }
                        Writer.Write(Rst);
                    } catch (Exception ex) {
                        Writer.Write(RLD);
                        Log("Exception Handled\n=================\n{0}\n{1}", true, ex.Message, ex.StackTrace);
                    }
                    Writer.Flush();
                    Log("Command Finished, In: {0}, Out: {1}", true, 1, 1);
                    break;

                case PipeCommands.AddMissed:
                    OK = true;
                    try {
                        Missed.Add(Reader.ReadString());
                    } catch { }
                    Log("Command Finished, In: {0}, Out: {1}", true, 1, 1);
                    break;

                case PipeCommands.FindMissed:
                    OK = true;
                    if (Missed.Contains(Reader.ReadString()))
                    {
                        Writer.Write((byte)PipeCommands.True);
                    }
                    else
                    {
                        Writer.Write((byte)PipeCommands.False);
                    }
                    Writer.Flush();
                    Log("Command Finished, In: {0}, Out: {1}", true, 1, 1);
                    break;

                case PipeCommands.AddPtr:
                    OK = true;
                    try {
                        Ptrs.Add(Reader.ReadInt64());
                    } catch { }
                    Log("Command Finished, In: {0}, Out: {1}", true, 1, 0);
                    break;

                case PipeCommands.GetPtrs:
                    OK = true;
                    uint Replys = 1;
                    Writer.Write(Ptrs.Count);
                    foreach (long Ptr in Ptrs)
                    {
                        Writer.Write(Ptr);
                        Replys++;
                    }
                    Writer.Flush();
                    Log("Command Finished, In: {0}, Out: {1}", true, 1, Replys);
                    break;

                case PipeCommands.EndPipe:
                    OK = true;
                    Log("Exit Command Recived...", true);
                    Environment.Exit(0);
                    break;

                case PipeCommands.AddMask:
                    OK = true;
                    string Input  = Reader.ReadString();
                    string Reload = Reader.ReadString();
                    if (!MskRld.ContainsKey(Input) || AllowDuplicates)
                    {
                        MskRld.Add(Input, Reload);
                    }
                    Log("Command Finished, In {0}, Out: {1}", true, 2, 0);
                    break;

                case PipeCommands.ChkMask:
                    string String = Reader.ReadString();

                    string[] Result = (from x in MskRld.Keys where MaskMatch(x, String) select x).ToArray();

                    Writer.Write((byte)((Result.Length > 0) ? PipeCommands.True : PipeCommands.False));
                    Writer.Flush();
                    Log("Command Finished, In: {0}, Out: {1}", true, 1, 1);
                    break;

                case PipeCommands.RldMask:
                    string Ori  = Reader.ReadString();
                    string Mask = (from x in MskRld.Keys where MaskMatch(x, Ori) select x).FirstOrDefault();
                    string Rld  = MskRld[Mask];

                    Writer.Write(MaskReplace(Mask, Ori, Rld));
                    Writer.Flush();
                    Log("Command Finished, In: {0}, Out: {1}", true, 2, 1);
                    break;

                case PipeCommands.AdvDB:
                    if (DBID >= Databases.Count)
                    {
                        return;
                    }

                    LastDBID++;
                    DBID = LastDBID;
                    Log("Command Finished, In: {0}, Out: {1}", true, 1, 0);
                    break;

                case PipeCommands.GetDBID:
                    Writer.Write(DBID);
                    Writer.Flush();
                    Log("Command Finished, In: {0}, Out: {1}", true, 1, 1);
                    break;

                case PipeCommands.SetDBID:
                    DBID = Reader.ReadInt32();
                    Log("Command Finished, In: {0}, Out: {1}", true, 2, 0);
                    break;

                case PipeCommands.GetDBIndex:
                    Writer.Write(((DuplicableDictionary <string, string>)StrRld).LastKeyIndex);
                    Writer.Flush();
                    Log("Command Finished, In: {0}, Out: {1}", true, 1, 1);
                    break;

                default:
                    if (!OK)
                    {
                        MessageBox.Show("Recived Invalid Command to the pipe service...", "SRL Engine", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    OK = false;
                    break;
                }
            }
            Server.Close();
            Reader.Close();
            Writer.Close();
        }