public static MessageDataContainer ParseSettingsMessage(byte[] packet)
            {
                MessageDataContainer data = new MessageDataContainer();

                data.MessageMission = packet[1];

                if ((data.MessageMission & (MissionAssign | MissionInform)) != 0)
                {
                    data.FocusDistance           = _array_to_32bit_int(packet, 2);
                    data.FocusVerticalCoordinate = _array_to_32bit_int(packet, 6);
                    data.SimpleViewWidth         = _array_to_32bit_int(packet, 10);
                    data.SimpleViewHeight        = _array_to_32bit_int(packet, 14);
                }

                if ((data.MessageMission & MissionRequest) != 0)
                {
                    byte[] addr = new byte[4];
                    Array.Copy(packet, 18, addr, 0, 4);
                    data.RemoteAddress = new IPAddress(addr);

                    data.RemotePort = (packet[22] & 0xFF) + 256 * (packet[23] & 0xFF);
                }

                return(data);
            }
            public static byte[] ComposeModeMessageBytes(MessageDataContainer msgDataContainer)
            {
                switch (((IModeMessageData)msgDataContainer).GetModeType())
                {
                case ModeType.Pic:
                    return(new[] { ModeTypePicCode });

                case ModeType.NoPic:
                    return(new[] { ModeTypeNoPicCode });

                case ModeType.Settings:
                    return(new[] { ModeTypeSettingsCode });

                default:
                    throw new ArgumentOutOfRangeException("msgDataContainer");
                }
            }
            public static byte[] ComposeSettingsBytes(MessageDataContainer msgDataContainer)
            {
                ISettingsMessageData idata = msgDataContainer;
                int totalCount             =
                    +1   //message mission(flags)
                    + 4  //focusDist
                    + 4  //focusVert
                    + 4  //simpleWidth
                    + 4  //simpleHeight
                    + 4  //inet4address //[nulls]
                    + 2; //port         //[nulls]

                //create array
                byte[] ret = new byte[totalCount];

                //assign flags
                ret[0] = idata.GetFlags();

                if ((idata.GetFlags() & (MissionAssign | MissionInform)) !=
                    0)
                {
                    _assign_32bit_int_to_array(ret, 1, idata.GetFocusDistance());
                    _assign_32bit_int_to_array(ret, 5, idata.GetFocusVerticalCoordinate());
                    _assign_32bit_int_to_array(ret, 9, idata.GetSimpleViewWidth());
                    _assign_32bit_int_to_array(ret, 13, idata.GetSimpleViewHeight());
                }

                if ((idata.GetFlags() & MissionRequest) != 0)
                {
                    Array.Copy(idata.GetRemoteAddress().GetAddressBytes(), 0, ret, 17, 4);
                    ret[21] = (byte)(idata.GetRemotePort() % 256);
                    ret[22] = (byte)(idata.GetRemotePort() / 256);
                }

                //return packet
                return(ret);
            }
 public static byte[] ComposeEmptyMessageBytes(MessageDataContainer msgDataContainer)
 {
     return(new byte[] { 0 });
 }
 public static byte[] ComposePingMessageBytes(MessageDataContainer msgDataContainer)
 {
     return(new byte[] { 0 }); //return zero byte
 }
Ejemplo n.º 6
0
 protected Message SetData(MessageDataContainer data)
 {
     Data = data;
     return(this);
 }