/// <summary>
 /// Creates realtime object used for communication state
 /// </summary>
 public void CreateRealtimeObjects()
 {
     // create file transfer state object
     m_file_transfer_state_object      = RealtimeObjectStorage.Default.ObjectCreate("FileTransferState");
     m_file_transfer_name_member       = m_file_transfer_state_object.MemberCreate("FileName", RealtimeObjectMember.MemberType.String);
     m_file_transfer_percentage_member = m_file_transfer_state_object.MemberCreate("FilePercentage", RealtimeObjectMember.MemberType.Int);
     m_file_transfer_state_object.ObjectCreateEnd();
 }
Beispiel #2
0
        /// <summary>
        /// Creates realtime object used for communication state
        /// </summary>
        public void CreateRealtimeObjects()
        {
            // create file transfer state object
            m_file_transfer_manager.CreateRealtimeObjects();

            // create device heart beat object
            m_device_heartbeat_object = RealtimeObjectStorage.Default.ObjectCreate("DeviceHeartBeat");
            m_cpu_load_member         = m_device_heartbeat_object.MemberCreate("CPULoad", RealtimeObjectMember.MemberType.Int);
            m_device_heartbeat_object.ObjectCreateEnd();

            // create communication state object
            m_communication_state_object = RealtimeObjectStorage.Default.ObjectCreate("DeviceCommunicationState");
            m_device_connected_member    = m_communication_state_object.MemberCreate("DeviceConnected", RealtimeObjectMember.MemberType.Int);
            m_device_name_member         = m_communication_state_object.MemberCreate("DeviceName", RealtimeObjectMember.MemberType.String);

            // create members from communicator plug-ins
            for (int i = 0; i < m_communication_interfaces.Count; i++)
            {
                m_communication_interfaces[i].CreateRealtimeObjects(m_communication_state_object);
            }

            m_communication_state_object.ObjectCreateEnd();
        }
Beispiel #3
0
        /// <summary>
        /// Process one packet from the packet receiver queue
        /// </summary>
        private void ProcessReceivedPacket()
        {
            bool last_device_connected;

            // return when there is no packet to process
            if (m_receiver_queue.IsEmpty())
            {
                return;
            }

            if (!m_receiver_queue.PeekPacketValid())
            {
                return;
            }

            // update connection state
            last_device_connected             = m_device_connected;
            m_device_connected                = true;
            m_last_device_heartbeat_timestamp = DateTime.Now;

            // get device name if it is just connected
            if (!last_device_connected)
            {
                PacketDeviceNameRequest packet = new PacketDeviceNameRequest();

                SendPacket(packet);
            }

            // get packet type
            PacketType packet_type = m_receiver_queue.PeekPacketType();

            if ((packet_type & PacketType.FlagSystem) != 0)
            {
                switch ((PacketType)((int)packet_type & PacketConstants.PacketClassMask))
                {
                case PacketType.ClassComm:
                    // process sytem packets
                    switch (packet_type)
                    {
                    // process device heartbeat packet
                    case PacketType.CommDeviceHeartbeat:
                        ProcessDeviceHeartbeatPacket();
                        break;

                    // process device name response
                    case PacketType.CommDeviceNameResponse:
                        ProcessDeviceNameResponsePacket();
                        break;
                    }
                    break;

                case PacketType.ClassFile:
                    m_file_transfer_manager.ProcessResponsePacket(packet_type);
                    break;
                }
            }
            else
            {
                // process realtime object packet
                byte[]   binary_packet;
                byte     binary_packet_length;
                byte     interface_index;
                DateTime timestamp;

                // pop packet
                m_receiver_queue.PopBegin(out binary_packet, out binary_packet_length, out interface_index, out timestamp);

                // process packet content
                RealtimeObject obj = RealtimeObjectStorage.Default.GetObjectByPacketID((byte)packet_type);
                if (obj != null)
                {
                    obj.Update(binary_packet, binary_packet_length, interface_index, timestamp);
                }

                // finish popping
                m_receiver_queue.PopEnd();
            }
        }
 /// <summary>
 /// Creates realtime object member used by this interface
 /// </summary>
 /// <param name="in_realtime_object"></param>
 public void CreateRealtimeObjects(RealtimeObject in_realtime_object)
 {
     m_upstream_member   = in_realtime_object.MemberCreate("UDPUpStream", RealtimeObjectMember.MemberType.Int);
     m_downstream_member = in_realtime_object.MemberCreate("UDPDownStream", RealtimeObjectMember.MemberType.Int);
 }