void ReadCallback(IAsyncResult ar)
            {
                serverThreadPause.Set();

                // Retrieve the state object and the handler socket
                // from the asynchronous state object.
                StateObject state   = (StateObject)ar.AsyncState;
                Socket      handler = state.workSocket;

                try
                {
                    // Read data from the client socket.
                    int bytesRead = handler.EndReceive(ar);

                    if (bytesRead > 0)
                    {
                        // Use a Wrapper constructor that extracts header bytes into fields
                        BinaryWrapper receivedMsg = new BinaryWrapper(state.buffer.ToArray(), true);
                        //Log.WriteLine("[RX] Receive on interface {0}", receivedMsg.interfaceId);
                        packetHandlingCallback(receivedMsg, receivedMsg.interfaceId);
                    }

                    //handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
                }
                catch (SocketException)
                {
                    Log.WriteLine("[RX] Lost incoming connection.");
                    handler.Shutdown(SocketShutdown.Both);
                    handler.Close();
                }
            }
Exemple #2
0
        public DDD_spcom_File(List <byte> byteFile)
        {
            counts   = new ObservableCollection <DDD_spcom_Count>();
            entriesA = new ObservableCollection <DDD_spcom_CombinationA>();
            entriesB = new ObservableCollection <DDD_spcom_CombinationB>();

            header = BinaryWrapper.toObject <DDD_spcom_Header>(byteFile.GetRange(0, DDD_spcom_Header.SIZE));

            // COUNTS
            int countsCount = header.spiritCount + 1; // + padding?

            for (int i = 0; i < countsCount; i++)
            {
                counts.Add(BinaryWrapper.toObject <DDD_spcom_Count>(byteFile.GetRange(header.countsOffset + i * DDD_spcom_Count.SIZE, DDD_spcom_Count.SIZE)));
            }

            //TABLE A
            for (int i = 0; i < header.tableACount; i++)
            {
                entriesA.Add(BinaryWrapper.toObject <DDD_spcom_CombinationA>(byteFile.GetRange(header.tableAOffset + i * DDD_spcom_CombinationA.SIZE, DDD_spcom_CombinationA.SIZE)));
            }

            // TABLE B
            for (int i = 0; i < header.tableBCount; i++)
            {
                entriesB.Add(BinaryWrapper.toObject <DDD_spcom_CombinationB>(byteFile.GetRange(header.tableBOffset + i * DDD_spcom_CombinationB.SIZE, DDD_spcom_CombinationB.SIZE)));
            }
        }
Exemple #3
0
        private int loadStackCategory(List <byte> byteFile, int currentOffset, byte category)
        {
            int count = 0;

            switch (category)
            {
            case (int)DDD_ItemCategories.DREAM_PIECE:
                count = COUNT_DREAM_PIECES;
                break;

            case (int)DDD_ItemCategories.TREAT:
                count = COUNT_TREATS;
                break;

            case (int)DDD_ItemCategories.TRAINING_TOY:
                count = COUNT_TRAINING_TOYS;
                break;

            default:
                break;
            }
            for (int i = 0; i < count; i++)
            {
                List <byte> byteEntry          = byteFile.GetRange(currentOffset, ENTRY_SIZE_STACK);
                DDD_inventory_EntryStack entry = BinaryWrapper.toObject <DDD_inventory_EntryStack>(byteEntry);
                entry.categoryId = category;
                entry.typeId     = (byte)i;
                entriesStack.Add(entry);
                currentOffset += ENTRY_SIZE_STACK;
            }

            return(currentOffset);
        }
 // FUNCTIONS
 public List<byte> toBytes()
 {
     List<byte> byteFile = new List<byte>();
     foreach (DDD_inventory_Command entry in entries)
     {
         byteFile.AddRange(BinaryWrapper.toBytes(entry));
     }
     return byteFile;
 }
Exemple #5
0
        public void readAction(ProcessHandler processHandler)
        {
            try
            {
                DDD_spcom_Header byteFileHeader = BinaryWrapper.toObject <DDD_spcom_Header>(processHandler.readBytesFromProcessModule((long)DDD_Pointers.SPCOM_MOD_EGS, DDD_spcom_Header.SIZE));

                loadFile(processHandler.readBytesFromProcessModule((long)DDD_Pointers.SPCOM_MOD_EGS, byteFileHeader.getFileSize()));
            }
            catch { writeInfoLabel("Error reading"); }
        }
 public DDD_spirit_File(List <byte> byteFile)
 {
     entries = new ObservableCollection <DDD_spirit_Entry>();
     for (int i = 0; i < ENTRY_COUNT; i++)
     {
         List <byte>      byteEntry = byteFile.GetRange(i * ENTRY_SIZE, ENTRY_SIZE);
         DDD_spirit_Entry entry     = BinaryWrapper.toObject <DDD_spirit_Entry>(byteEntry);
         entries.Add(entry);
     }
 }
        // FUNCTIONS

        public List <byte> toBytes()
        {
            List <byte> byteFile = new List <byte>();

            foreach (DDD_spirit_Entry entry in entries)
            {
                byteFile.AddRange(BinaryWrapper.toBytes(entry));
            }
            return(byteFile);
        }
 public DDD_techprm_File(List <byte> byteFile)
 {
     entries = new ObservableCollection <DDD_techprm_Entry>();
     for (int i = 0; i < (byteFile.Count / DDD_techprm_Entry.SIZE); i++)
     {
         List <byte>       byteEntry = byteFile.GetRange(i * DDD_techprm_Entry.SIZE, DDD_techprm_Entry.SIZE);
         DDD_techprm_Entry entry     = BinaryWrapper.toObject <DDD_techprm_Entry>(byteEntry);
         entries.Add(entry);
     }
 }
        // FUNCTIONS

        public List <byte> toBytes()
        {
            List <byte> byteFile = new List <byte>();

            foreach (DDD_lboard_Entry entry in entries)
            {
                byteFile.AddRange(BinaryWrapper.toBytes(entry));
            }
            //byteFile.AddRange(BinaryHelper.hexStringAsBytes(HEX_EOF));
            return(byteFile);
        }
        private void construct(List <byte> byteFile)
        {
            entries = new ObservableCollection <DDD_lboard_Entry>();
            int entryCount = byteFile.Count / DDD_lboard_Entry.SIZE;

            for (int i = 0; i < entryCount; i++)
            {
                List <byte>      byteEntry = byteFile.GetRange(i * DDD_lboard_Entry.SIZE, DDD_lboard_Entry.SIZE);
                DDD_lboard_Entry entry     = BinaryWrapper.toObject <DDD_lboard_Entry>(byteEntry);
                entries.Add(entry);
            }
        }
        public DDD_btlparam_File(List <byte> byteFile)
        {
            entries = new ObservableCollection <DDD_btlparam_Entry>();
            int entryCount = byteFile.Count / ENTRY_SIZE;

            for (int i = 0; i < entryCount; i++)
            {
                List <byte>        byteEntry = byteFile.GetRange(i * ENTRY_SIZE, ENTRY_SIZE);
                DDD_btlparam_Entry entry     = BinaryWrapper.toObject <DDD_btlparam_Entry>(byteEntry);
                entries.Add(entry);
            }
        }
Exemple #12
0
        // FUNCTIONS

        public List <byte> toBytes()
        {
            List <byte> byteFile = new List <byte>();

            recalcCounts();
            byteFile.AddRange(BinaryWrapper.toBytes(header));

            foreach (DDD_tboxdt_Entry entry in entries)
            {
                byteFile.AddRange(BinaryWrapper.toBytes(entry));
            }
            return(byteFile);
        }
            public void SendData(BinaryWrapper wrappedPacket, byte interfaceId)
            {
                if (!outSocketConnected)
                {
                    throw new Exception("Router is not connected with wirecloud's receiving end!");
                }

                wrappedPacket.interfaceId  = interfaceId;                         // Header byte 1: interface identifier number
                wrappedPacket.randomNumber = (byte)((new Random()).Next() % 255); // Header byte 2: Random byte-sized ID generated based on the current timestamp

                byte[] rawData = wrappedPacket.HeaderPlusData();
                clientSocket.BeginSend(rawData, 0, rawData.Length, 0, new AsyncCallback(SendCallback), clientSocket); // Begin sending the data to the remote device.
            }
        public void SendPeerMessage(byte snppId, GenericMessage genmsg)
        {
            //Log.WriteLine("[TX] PeerMessage: {0}, SNPP {1}", genmsg.messageType, snppId);

            MPLSPacket packet = new MPLSPacket(new int[] { 0 }, "");

            packet.managementObject = genmsg;

            AggregatePacket aggregatePacket = new AggregatePacket(new MPLSPacket[] { packet });
            BinaryWrapper   wrappedPacket   = MPLSMethods.Serialize(aggregatePacket);

            MAC.SendData(wrappedPacket, snppId);
            //Log.WriteLine("[TX {0}] => {1}, iface {2}", snppId, genmsg.messageType, snppId);
        }
Exemple #15
0
        // FUNCTIONS

        public List <byte> toBytes()
        {
            List <byte> byteFile = new List <byte>();

            foreach (DDD_inventory_Entry entry in entries)
            {
                byteFile.AddRange(BinaryWrapper.toBytes(entry));
            }
            foreach (DDD_inventory_EntryStack entry in entriesStack)
            {
                byteFile.AddRange(BinaryWrapper.toBytes(entry));
            }
            return(byteFile);
        }
        // FUNCTIONS

        public List <byte> toBytes()
        {
            List <byte> byteFile = new List <byte>();

            recalcCounts();
            byteFile.AddRange(BinaryWrapper.toBytes(header));

            foreach (DDD_lbtList_Board board in boards)
            {
                byteFile.AddRange(board.toBytes());
            }
            byteFile.AddRange(filePadding);
            return(byteFile);
        }
        // FUNCTIONS

        public List <byte> toBytes()
        {
            List <byte> byteFile = new List <byte>();

            recalcCounts();
            byteFile.AddRange(BinaryWrapper.toBytes(header));

            foreach (DDD_itemdata_Entry entry in entries)
            {
                byteFile.AddRange(BinaryWrapper.toBytes(entry));
            }
            byteFile.AddRange(BinaryHelper.hexStringAsBytes(HEX_EOF));
            return(byteFile);
        }
Exemple #18
0
        public DDD_tboxdt_File(List <byte> byteFile)
        {
            // Header
            header = BinaryWrapper.toObject <DDD_tboxdt_FileHeader>(byteFile.GetRange(0, HEADER_SIZE));

            // Entries
            entries = new ObservableCollection <DDD_tboxdt_Entry>();
            for (int i = 0; i < header.totalCount; i++)
            {
                List <byte>      byteEntry = byteFile.GetRange(HEADER_SIZE + (i * ENTRY_SIZE), ENTRY_SIZE);
                DDD_tboxdt_Entry entry     = BinaryWrapper.toObject <DDD_tboxdt_Entry>(byteEntry);
                entries.Add(entry);
            }
        }
Exemple #19
0
        // FUNCTIONS

        public List <byte> toBytes()
        {
            recalcCounts();

            List <byte> byteFile = new List <byte>();

            byteFile.AddRange(BinaryWrapper.toBytes(header));

            foreach (DDD_lboard_Board board in boards)
            {
                byteFile.AddRange(board.toBytes());
            }
            byteFile.AddRange(BinaryHelper.hexStringAsBytes(HEX_EOF));
            return(byteFile);
        }
        void SendPacketsCallback(object state)
        {
            foreach (TELinkEnd iface in routerInterfaces)
            {
                MPLSPacket[] queuedPackets = iface.GetPacketsAndEmptyQueue(); // Loads all packets stored in a queue and clears that interface's queue
                if (queuedPackets.Length > 0)
                {
                    AggregatePacket finalPacket   = new AggregatePacket(queuedPackets);
                    BinaryWrapper   wrappedPacket = MPLSMethods.Serialize(finalPacket);

                    MAC.SendData(wrappedPacket, iface.Id);

                    Log.WriteLine("[TX {0}] => {1} MPLS packet(s)", iface.Id, queuedPackets.Length);
                }
            }
        }
        public DDD_lbtList_File(List <byte> byteFile)
        {
            // Header
            header = BinaryWrapper.toObject <DDD_lbtList_FileHeader>(byteFile.GetRange(0, HEADER_SIZE));

            // Boards
            boards = new ObservableCollection <DDD_lbtList_Board>();
            for (int i = 0; i < header.boardCount; i++)
            {
                List <byte>       byteBoard = byteFile.GetRange(HEADER_SIZE + (i * DDD_lbtList_Board.SIZE), DDD_lbtList_Board.SIZE);
                DDD_lbtList_Board board     = new DDD_lbtList_Board(byteBoard, i);
                boards.Add(board);
            }

            // EOF padding
            filePadding = byteFile.GetRange(byteFile.Count - EOFPADDING_SIZE, EOFPADDING_SIZE);
        }
Exemple #22
0
        private int loadCategory(List <byte> byteFile, int currentOffset, byte category)
        {
            int count = 0;

            switch (category)
            {
            case (int)DDD_ItemCategories.KEYBLADE:
                count = COUNT_KEYBLADES;
                break;

            case (int)DDD_ItemCategories.RECIPE:
                count = COUNT_RECIPES;
                break;

            case (int)DDD_ItemCategories.KEY_ITEM:
                count = COUNT_KEY_ITEMS;
                break;

            case (int)DDD_ItemCategories.GLOSSARY:
                count = COUNT_GLOSSARY;
                break;

            case (int)DDD_ItemCategories.MEMENTO:
                count = COUNT_MEMENTO;
                break;

            case (int)DDD_ItemCategories.UNKNOWN:
                count = COUNT_UNKNOWN;
                break;

            default:
                break;
            }
            for (int i = 0; i < count; i++)
            {
                List <byte>         byteEntry = byteFile.GetRange(currentOffset, ENTRY_SIZE);
                DDD_inventory_Entry entry     = BinaryWrapper.toObject <DDD_inventory_Entry>(byteEntry);
                entry.categoryId = category;
                entry.typeId     = (byte)i;
                entries.Add(entry);
                currentOffset += ENTRY_SIZE;
            }

            return(currentOffset);
        }
Exemple #23
0
        // FUNCTIONS

        public List <byte> toBytes()
        {
            List <byte> byteFile = new List <byte>();

            byteFile.AddRange(BinaryWrapper.toBytes(header));

            foreach (DDD_spcom_Count count in counts)
            {
                byteFile.AddRange(BinaryWrapper.toBytes(count)); Console.WriteLine("count");
            }
            foreach (DDD_spcom_CombinationA entry in entriesA)
            {
                byteFile.AddRange(BinaryWrapper.toBytes(entry)); Console.WriteLine("entryA");
            }
            foreach (DDD_spcom_CombinationB entry in entriesB)
            {
                byteFile.AddRange(BinaryWrapper.toBytes(entry)); Console.WriteLine("entryB");
            }

            return(byteFile);
        }
        void PacketHandler(BinaryWrapper packet, byte interfaceId)
        {
            AggregatePacket receivedPacket = MPLSMethods.Deserialize(packet);

            //Log.WriteLine("[RX {0}] \t {1} packet(s)", interfaceId, receivedPacket.packets.Length);

            foreach (MPLSPacket mplspacket in receivedPacket.packets)
            {
                if (mplspacket.managementObject != null)
                {
                    GenericMessage genmsg = (GenericMessage)mplspacket.managementObject;
                    //Log.WriteLine("[RX {0}] \t {1}", interfaceId, genmsg.messageType);
                    handleMgmtPackets(interfaceId, genmsg);
                }
                else
                {
                    Log.WriteLine("[RX] Packet on interface {0}", interfaceId);
                    Route(mplspacket, interfaceId);
                }
            }
        }
Exemple #25
0
        public DDD_lboard_File(List <byte> byteFile)
        {
            header = BinaryWrapper.toObject <DDD_lboard_Header>(byteFile.GetRange(0, DDD_lboard_Header.SIZE));
            boards = new ObservableCollection <DDD_lboard_Board>();
            for (int i = 0; i < header.boardCount; i++)
            {
                int boardOffset = header.boardOffsets[i];
                int nextOffset;
                if (i == header.boardCount - 1)
                {
                    nextOffset = byteFile.Count - DDD_lboard_Entry.SIZE;
                }
                else
                {
                    nextOffset = header.boardOffsets[i + 1];
                }

                int boardSize = nextOffset - boardOffset;

                List <byte>      byteEntry = byteFile.GetRange(boardOffset, boardSize);
                DDD_lboard_Board entry     = new DDD_lboard_Board(byteEntry, i);
                boards.Add(entry);
            }
        }
Exemple #26
0
 public static void Save(IValueSink sink, BinaryWrapper value)
 {
     Value<BinaryPV>.Save(sink, value.Item);
 }
Exemple #27
0
 public static void Save(IValueSink sink, BinaryWrapper value)
 {
     Value <BinaryPV> .Save(sink, value.Item);
 }