Esempio n. 1
0
        private static MMMesssage FindMesssage(int address)
        {
            int fileIndex   = GetFileIndexForWriting(TxtTable);
            int baseAddress = TxtTable - MMFileList[fileIndex].Addr;

            MMMesssage message = new MMMesssage();

            while (true)
            {
                int x = (MMFileList[fileIndex].Data[baseAddress] << 8)
                        + MMFileList[fileIndex].Data[baseAddress + 1];

                if (address == x)
                {
                    var data = MMFileList[fileIndex].Data;
                    message.Address = (int)(Arr_ReadU32(data, baseAddress + 4) & 0xFFFFFF);
                    message.Size    = (int)(Arr_ReadU32(data, baseAddress + 12) & 0xFFFFFF) - message.Address;
                    break;
                }

                if (x > address)
                {
                    return(null);
                }

                baseAddress += 8;
            }

            return(message);
        }
Esempio n. 2
0
        public static void WriteGossipMessage(List <string> messages, Random RNG)
        {
            for (int i = GossipStart; i < GossipEnd; i++)
            {
                if (GossipExclude.Contains(i))
                {
                    continue;
                }

                MMMesssage message = FindMesssage(i);
                if (message == null)
                {
                    continue;
                }

                int randomMessageIndex;
                int length = message.Size + 1;
                do
                {
                    randomMessageIndex = RNG.Next(messages.Count);

                    if (IsBadMesssage(messages[randomMessageIndex]) && RNG.Next(8) != 0)
                    {
                        continue;
                    }

                    length = messages[randomMessageIndex].Length + Values.MessageHeader.Count;
                } while (length > message.Size);

                byte[] data = new byte[length];
                Arr_Insert(Values.MessageHeader.ToArray(), 0, Values.MessageHeader.Count, data, 0);

                for (int k = 0; k < messages[randomMessageIndex].Length; k++)
                {
                    data[k + Values.MessageHeader.Count] = (byte)messages[randomMessageIndex][k];
                }

                WriteMessage(message.Address, data);
                messages.RemoveAt(randomMessageIndex);
            }
            ;
        }