Ejemplo n.º 1
0
        public static CoReMethodName ToCoReName([NotNull] this IMethodName name)
        {
            var builder = new StringBuilder();

            if (name.IsConstructor)
            {
                builder.Append(name.DeclaringType.ToName(), ".<init>(");
                StringBuilderUtils.Append(builder, name.Parameters.Select(n => n.ValueType.ToName() + ";").ToArray());
                builder.Append(")LSystem/Void;");
            }
            else
            {
                builder.Append(name.DeclaringType.ToName(), ".");
                builder.Append(name.IsUnknown ? "unknown" : name.Name);
                builder.Append("(");
                // TODO @seb: fix analysis and remove check;
                if (name.Parameters != null)
                {
                    StringBuilderUtils.Append(
                        builder,
                        name.Parameters.Select(n => n.ValueType.ToName() + ";").ToArray());
                }
                builder.Append(")", name.ReturnType.ToName(), ";");
            }
            return(new CoReMethodName(builder.ToString()));
        }
        private void RecoverLog(string sFile)
        {
            const int BUFFER_COUNT = 4096;

            StreamReader srLog = new StreamReader(new FileStream(sFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), _encoding);

            try
            {
                StringBuilder sb              = new StringBuilder();
                char[]        cBuffer         = new char[BUFFER_COUNT];
                int           iCharactersRead = BUFFER_COUNT;
                string        sFindPrefix     = _messageFactory.GetSearchStringMessageEndPrefix();
                string        sFindSuffix     = _messageFactory.GetSearchStringMessageEndSuffix() + Environment.NewLine;
                if (log.IsDebugEnabled)
                {
                    log.DebugFormat("RecoverLog - FindPrefix={0} FindSuffix={1}", sFindPrefix, sFindSuffix);
                }
                int iFindStart = 0;
                int iMessageEnd;

                string           sMessage;
                MessageDirection direction;
                IMessage         message;
                int  iIndex;
                int  recordLength;
                bool parseNext;

                IMessageSequenceReset reset;
                ArrayList             alIndex;

                while (iCharactersRead != 0)
                {
                    iCharactersRead = srLog.Read(cBuffer, 0, BUFFER_COUNT);
                    sb.Append(cBuffer, 0, iCharactersRead);
                    if (log.IsDebugEnabled)
                    {
                        log.DebugFormat("RecoverLog - CharactersRead={0} StringBuilder.Length={1}", iCharactersRead, sb.Length);
                    }

                    do
                    {
                        parseNext = false;

                        iMessageEnd = StringBuilderUtils.Find(sb, sFindPrefix, iFindStart);
                        if (iMessageEnd > 0)
                        {
                            iFindStart  = iMessageEnd;
                            iMessageEnd = StringBuilderUtils.Find(sb, sFindSuffix, iMessageEnd + sFindPrefix.Length);
                            if (iMessageEnd > 0)
                            {
                                iFindStart   = 0;
                                direction    = MessageDirectionFromChar(sb[0]);
                                sMessage     = sb.ToString(2, iMessageEnd - 1);
                                recordLength = sMessage.Length + 4;

                                //parse message to object
                                if (log.IsDebugEnabled)
                                {
                                    log.DebugFormat("RecoverLog - Parse message / Message={0}", sMessage);
                                }
                                message = _messageFactory.Parse(sMessage);

                                //write to index file
                                if (log.IsDebugEnabled)
                                {
                                    log.DebugFormat("RecoverLog - Write to index file / Direction={0} MsgSeqNum={1} Length={2}",
                                                    direction, message.MsgSeqNum, recordLength);
                                }
                                _bwIndex.Write((byte)direction);
                                _bwIndex.Write(message.MsgSeqNum);
                                _bwIndex.Write(recordLength);
                                _bwIndex.Flush();

                                //add to memory index
                                iIndex = _alMessages.Add(new MessageIndex(direction, message.MsgSeqNum, recordLength));

                                if (iIndex != -1)
                                {
                                    AddDirectionIndex(direction, message.MsgSeqNum, iIndex);
                                }
                                else
                                {
                                    reset   = (IMessageSequenceReset)message;
                                    alIndex = GetMessageDirectionArrayList(direction);
                                    ProcessSystemResetMsgSeqNum(reset.NewSeqNo, alIndex);
                                }

                                //remove from stream
                                sb.Remove(0, recordLength);

                                //check if room for another message in buffer
                                if (sb.Length > sFile.Length)
                                {
                                    parseNext = true;
                                }
                            }
                        }
                        else
                        {
                            iFindStart = sb.Length - sFindPrefix.Length;
                            if (iFindStart < 0)
                            {
                                iFindStart = 0;
                            }
                        }
                    } while (parseNext);
                }
            }
            finally
            {
                srLog.Close();
            }
        }