Esempio n. 1
0
        public ClassConverter(Type type)
        {
            this.type = type;

            object[] attributes = type.GetCustomAttributes(typeof(TransferableAttribute), true);

            foreach (TransferableAttribute attr in attributes)
            {
                PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

                var props = properties.Where(x => Attribute.GetCustomAttributes(x, typeof(DataAttribute)).Length > 0)
                            .OrderBy(x => ((DataAttribute)Attribute.GetCustomAttributes(x, typeof(DataAttribute))[0]).Index);

                foreach (PropertyInfo p in props)
                {
                    //Util.Log("name:" + f.Name);

                    var dattrs = Attribute.GetCustomAttributes(p, typeof(DataAttribute));

                    foreach (var datt in dattrs)
                    {
                        parameters.Add(p);
                        converters.Add(DataSerializer.GetConverter(p.PropertyType));
                        break;
                    }
                }

                return;
            }

            throw new InvalidDataException("The class " + type.Name + " is not supported.");
        }
Esempio n. 2
0
        public IListConverter(Type type)
        {
            this.type        = type;
            this.elementType = type.GetGenericArguments()[0];

            converter = DataSerializer.GetConverter(elementType);
        }
Esempio n. 3
0
        public ComServer()
        {
            IsOpened = false;

            if (Global.UseSyncContextPost && Global.SyncContext == null)
            {
                Global.SyncContext = SynchronizationContext.Current;
            }

            AddChannel(new DataChannel <string>((short)PreservedChannelId.Login, QosType.Reliable, Compression.None, (node, data) =>
            {
                node.UserName = data;

                if (OnConnected != null)
                {
                    OnConnected(node);
                }

                Util.Log("SetUsername:" + node.UserName);
            }));

            AddChannel(new DataChannel <byte>((short)PreservedChannelId.Health, QosType.Unreliable, Compression.None, (node, data) => {}));

            beaconConverter = DataSerializer.GetConverter(typeof(string));
        }
Esempio n. 4
0
        public DataChannel(
            short channelID,
            QosType qos,
            Compression compression,
            Encryption encryption,
            ReceivedHandler onReceived,
            CheckMode checkMode = CheckMode.Sequre
            )
        {
            ChannelID   = channelID;
            Qos         = qos;
            Compression = compression;
            Encryption  = encryption;

            OnReceived += onReceived;

            CheckMode = checkMode;

            converter = DataSerializer.GetConverter(typeof(T));

            if (Compression == Compression.LZ4)
            {
                byteArrayConverter = DataSerializer.GetConverter(typeof(byte[]));
            }

            if (Encryption == Encryption.Rsa || Encryption == Encryption.Aes)
            {
                encArrayConverter = DataSerializer.GetConverter(typeof(byte[]));
            }
        }
Esempio n. 5
0
        public IDictionaryConverter(Type type)
        {
            this.type      = type;
            this.keyType   = type.GetGenericArguments()[0];
            this.valueType = type.GetGenericArguments()[1];

            keyConverter   = DataSerializer.GetConverter(keyType);
            valueConverter = DataSerializer.GetConverter(valueType);
        }
Esempio n. 6
0
        public DataChannel(short channelID, QosType qos, Compression compression, ReceivedHandler onReceived)
        {
            ChannelID   = channelID;
            Qos         = qos;
            Compression = Compression;
            OnReceived += onReceived;

            converter    = DataSerializer.GetConverter(typeof(T));
            lz4converter = DataSerializer.GetConverter(typeof(byte[]));
        }
Esempio n. 7
0
        public ComServer(bool userSyncContext = true)
        {
            IsOpened = false;

            this.userSyncContext = userSyncContext;

            AddChannel(new DataChannel <IssueIdData>((short)PreservedChannelId.IssueId, QosType.Reliable, Compression.None, Encryption.None, (node, data) =>
            {
                OnIssueId(node, data);
            }));

            AddChannel(new DataChannel <byte[]>((short)PreservedChannelId.Health, QosType.Unreliable, Compression.None, Encryption.None, (node, data) =>
            {
                byte[] decrypted = DecrypteTmpKey(data);
                if (node.TmpKey != null && node.TmpKey.SequenceEqual(decrypted))
                {
                    node.HealthLostCount = 0;
                }
                else
                {
                    node.TmpKey = null;
                }
            }));

            AddChannel(new DataChannel <IssueIdData>((short)PreservedChannelId.UdpNotify, QosType.Unreliable, Compression.None, Encryption.None, (node, data) =>
            {
            }));

            AddChannel(new DataChannel <int>((short)PreservedChannelId.UdpNotifyAck, QosType.Reliable, Compression.None, Encryption.None, (node, data) =>
            {
            }));

            AddChannel(new DataChannel <AesKeyPair>((short)PreservedChannelId.KeyExchange, QosType.Reliable, Compression.None, Encryption.Rsa, (node, data) =>
            {
                OnKeyExchange(node, data);
            }));

            AddChannel(new DataChannel <int>((short)PreservedChannelId.KeyExchangeAck, QosType.Reliable, Compression.None, Encryption.None, (node, data) =>
            {
            }));

            beaconConverter = DataSerializer.GetConverter(typeof(string));

            healthTimer          = new System.Timers.Timer(healthIntervalMs);
            healthTimer.Elapsed += OnHealthCheck;

            removeNodeCheckTimer          = new System.Timers.Timer(removeNodeCheckIntervalMs);
            removeNodeCheckTimer.Elapsed += OnRemoveNodeCheck;
        }
Esempio n. 8
0
        public RawDataChannel(
            short channelID, QosType qos, Compression compression, ReceivedHandler onReceived, CheckMode checkMode = CheckMode.Sequre
            )
        {
            ChannelID   = channelID;
            Qos         = qos;
            Compression = compression;

            OnReceived += onReceived;

            CheckMode = checkMode;

            converter    = DataSerializer.GetConverter(typeof(T));
            lz4converter = DataSerializer.GetConverter(typeof(byte[]));
        }
Esempio n. 9
0
 public ArrayConverter(Type type)
 {
     this.type = type;
     converter = DataSerializer.GetConverter(type.GetElementType());
 }