Exemplo n.º 1
0
        /// <summary>
        /// Create data processor function
        /// </summary>
        /// <typeparam name="TConfig"></typeparam>
        /// <param name="config"></param>
        /// <param name="loggerFactory"></param>
        /// <param name="dataProcessorType"></param>
        /// <param name="getIdFunc"></param>
        /// <returns></returns>
        public Func <IDataProcessor> CreateDataProcesorFunc <TConfig>(TConfig config, ILoggerFactory loggerFactory,
                                                                      EnumDataProcessorType dataProcessorType, Func <byte[], byte[]> getIdFunc = null)
            where TConfig : ConfigBase
        {
            // set data processor creator
            switch (dataProcessorType)
            {
            case EnumDataProcessorType.Hsm:
                return(new Func <IDataProcessor>(() => SimpleMessageDataProcessor.CreateProcessor(
                                                     loggerFactory.CreateLogger <SimpleMessageDataProcessor>(),
                                                     config.SocketBufferSize * 2)));

            case EnumDataProcessorType.Message:
                return(new Func <IDataProcessor>(() => SimpleMessageDataProcessor.CreateProcessor(
                                                     loggerFactory.CreateLogger <SimpleMessageDataProcessor>(),
                                                     config.SocketBufferSize * 2, 2)));

            case EnumDataProcessorType.Iso8583:
                return(new Func <IDataProcessor>(() => MessageDataProcessor.CreateIso8583Processor(
                                                     loggerFactory.CreateLogger <MessageDataProcessor>(),
                                                     config.SocketBufferSize * 2, getIdFunc)));
            }

            // nothing done
            return(null);
        }
        public void TestDelimiterInHeaderDoesNotSplitMessage()
        {
            // create processor
            var logp = new LoggerFactory();
            var cfg  = new MessageDataProcessorConfig(5000, new byte[] { 3 }, true);
            var proc = new MessageDataProcessor(cfg, logp.CreateLogger <MessageDataProcessor>());

            // create buffer
            // (03 - length, XXX  - message, 3 - terminator)
            var buffer = new byte[] {
                0, 3, 88, 88, 88, 3,
                0, 3, 99, 99, 99, 3,
            };

            // process result
            var ret = proc.ProcessReceivedRawData(buffer, buffer.Length);

            Assert.AreEqual(2, ret.Count());
            Assert.IsTrue(new byte[] { 88, 88, 88 }.SequenceEqual(ret.First()));
            Assert.IsTrue(new byte[] { 99, 99, 99 }.SequenceEqual(ret.Skip(1).First()));
        }
Exemplo n.º 3
0
        private void LoadEvd(string filePath)
        {
            using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                EndianBinaryReader reader = new EndianBinaryReader(stream, Endian.Little);

                int messageCount = reader.ReadInt32();
                for (int i = 0; i < messageCount; i++)
                {
                    mMessageList.Add(new Message(reader, i));
                }

                // Command block 1
                int  commandBlockSize = reader.ReadInt32() * 4;
                long startPos         = reader.BaseStream.Position;

                while (reader.BaseStream.Position - startPos < commandBlockSize)
                {
                    uint cmdID = reader.ReadUInt32();

                    if (cmdID == 2147479592)
                    {
                        int formatTest = reader.PeekReadInt32();

                        if (formatTest == 1000 || formatTest == 0)
                        {
                            Command cmd = new Command(CommandTemplates.First(x => x.Name == "func_F028_2"));
                            cmd.ReadBinary(reader);
                            mCommandList_1.Add(cmd);
                        }
                        else
                        {
                            Command cmd = new Command(CommandTemplates.First(x => x.Name == "func_F028"));
                            cmd.ReadBinary(reader);
                            mCommandList_1.Add(cmd);
                        }

                        continue;
                    }
                    else if (cmdID == 2147479612)
                    {
                        int formatTest = reader.PeekReadInt32();

                        if (formatTest == 1)
                        {
                            Command cmd = new Command(CommandTemplates.First(x => x.Name == "func_F03C_2"));
                            cmd.ReadBinary(reader);
                            mCommandList_1.Add(cmd);
                        }
                        else
                        {
                            Command cmd = new Command(CommandTemplates.First(x => x.Name == "func_F03C"));
                            cmd.ReadBinary(reader);
                            mCommandList_1.Add(cmd);
                        }

                        continue;
                    }
                    else
                    {
                        Command cmd = new Command(CommandTemplates.First(x => x.ID == cmdID));
                        cmd.ReadBinary(reader);
                        mCommandList_1.Add(cmd);
                    }
                }

                // Command block 2
                commandBlockSize = reader.ReadInt32() * 4;
                startPos         = reader.BaseStream.Position;

                while (reader.BaseStream.Position - startPos < commandBlockSize)
                {
                    uint    cmdID = reader.ReadUInt32();
                    Command cmd   = new Command(CommandTemplates.First(x => x.ID == cmdID));
                    cmd.ReadBinary(reader);
                    mCommandList_2.Add(cmd);
                }

                // Player choices
                int choiceBlockCount = reader.ReadInt32();

                for (int i = 0; i < choiceBlockCount; i++)
                {
                    List <string> choices = new List <string>();

                    int numStrings = reader.ReadInt32();

                    for (int j = 0; j < numStrings; j++)
                    {
                        int    stringLength = reader.ReadInt32();
                        byte[] strBytes     = reader.ReadBytes(stringLength);
                        choices.Add(MessageDataProcessor.DecodeBytes(strBytes));

                        MessageDataProcessor.PadMessageReader(reader);
                    }

                    mChoices.Add(choices.ToArray());
                }
            }
        }
Exemplo n.º 4
0
        private void SaveEvd(string filePath)
        {
            string dir  = Path.GetDirectoryName(filePath);
            string name = Path.GetFileNameWithoutExtension(filePath);

            using (FileStream strm = new FileStream(Path.Combine(dir, name + ".evd"), FileMode.Create, FileAccess.Write))
            {
                EndianBinaryWriter writer = new EndianBinaryWriter(strm, Endian.Little);

                writer.Write(mMessageList.Count);

                for (int i = 0; i < mMessageList.Count; i++)
                {
                    mMessageList[i].Write(writer, i);
                }

                // Write command stream 1
                writer.Write((int)0);
                long curOffset = writer.BaseStream.Position;

                foreach (Command com in mCommandList_1)
                {
                    com.WriteBinary(writer, null);
                }

                long size = writer.BaseStream.Position - curOffset;
                writer.BaseStream.Seek(curOffset - 4, SeekOrigin.Begin);
                writer.Write((int)size / 4);

                writer.Seek(0, SeekOrigin.End);

                // Write command stream 2
                writer.Write((int)0);
                curOffset = writer.BaseStream.Position;

                foreach (Command com in mCommandList_2)
                {
                    com.WriteBinary(writer, null);
                }

                size = writer.BaseStream.Position - curOffset;
                writer.BaseStream.Seek(curOffset - 4, SeekOrigin.Begin);
                writer.Write((int)size / 4);

                writer.Seek(0, SeekOrigin.End);

                writer.Write((int)mChoices.Count);

                foreach (string[] strArray in mChoices)
                {
                    writer.Write((int)strArray.Length);

                    foreach (string str in strArray)
                    {
                        byte[] chars = MessageDataProcessor.EncodeString(str);
                        writer.Write((int)chars.Length);
                        writer.Write(chars);
                        MessageDataProcessor.PadMessageWriter(writer);
                    }
                }
            }
        }