/// <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(); }
/// <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(); }
/// <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); }