Ejemplo n.º 1
0
        public static int Sizeof(SharerType type)
        {
            switch (type)
            {
            case SharerType.@bool:
            case SharerType.@byte:
            case SharerType.@short:
                return(1);

            case SharerType.@int:
            case SharerType.@uint:
                return(2);

            case SharerType.@long:
            case SharerType.@ulong:
            case SharerType.@float:
                return(4);

            case SharerType.int64:
            case SharerType.uint64:
            case SharerType.@double:
                return(8);

            default:
                return(0);
            }
        }
Ejemplo n.º 2
0
        public static void Encode(SharerType type, BinaryWriter writer, object value)
        {
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            switch (type)
            {
            case SharerType.@bool:
                var boolValue = Boolean.Parse(value.ToString());
                writer.Write((byte)(boolValue? 1:0));
                break;

            case SharerType.@byte:
                writer.Write(Byte.Parse(value.ToString()));
                break;

            case SharerType.@short:
                writer.Write(SByte.Parse(value.ToString()));
                break;

            case SharerType.@int:
                writer.Write(Int16.Parse(value.ToString()));
                break;

            case SharerType.@uint:
                writer.Write(UInt16.Parse(value.ToString()));
                break;

            case SharerType.@long:
                writer.Write(Int32.Parse(value.ToString()));
                break;

            case SharerType.@ulong:
                writer.Write(UInt32.Parse(value.ToString()));
                break;

            case SharerType.@float:
                writer.Write(float.Parse(value.ToString().Replace(",", "."), System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.CultureInfo.InvariantCulture));
                break;

            case SharerType.int64:
                writer.Write(Int64.Parse(value.ToString()));
                break;

            case SharerType.uint64:
                writer.Write(UInt64.Parse(value.ToString()));
                break;

            case SharerType.@double:
                writer.Write(double.Parse(value.ToString().Replace(",", "."), System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.CultureInfo.InvariantCulture));
                break;

            default:
                throw new Exception("Type " + type.ToString() + " not supported");
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Read simultaneously several variables in Arduino
        /// </summary>
        /// <param name="names">Names of variable to read</param>
        /// <returns>Variable values and read status</returns>
        public List <SharerReadVariableReturn> ReadVariables(IEnumerable <string> names)
        {
            AssertConnected();

            if (names == null)
            {
                throw new ArgumentNullException("names");
            }
            if (names.Count() == 0)
            {
                return(new List <SharerReadVariableReturn>());
            }

            var ids = new short[names.Count()];

            var types = new SharerType[names.Count()];

            for (int i = 0; i < names.Count(); i++)
            {
                ids[i] = (short)Variables.FindIndex((x) => string.Equals(x.Name, names.ElementAt(i)));
                if (ids[i] < 0)
                {
                    throw new Exception(names.ElementAt(i) + " not found in variables");
                }
                types[i] = Variables[ids[i]].Type;
            }

            byte[] buffer;

            using (MemoryStream memory = new MemoryStream())
            {
                using (BinaryWriter writer = new BinaryWriter(memory))
                {
                    writer.Write((short)ids.Length);
                    foreach (var id in ids)
                    {
                        writer.Write(id);
                    }
                    buffer = memory.ToArray();
                }
            }


            var cmd = new SharerReadVariablesCommand(buffer, types);

            sendCommand(cmd);

            bool success = cmd.WaitAnswer(DEFAULT_TIMEOUT);

            if (!success)
            {
                throw new Exception("Error while reading variables", cmd.Exception);
            }

            return(cmd.Values);
        }
Ejemplo n.º 4
0
 public void Share(string message, SharerType sharerType)
 {
     if (sharerType == SharerType.Reddit)
     {
         redditPoster.Post(message);
     }
     else
     {
         Sharing sharer = SharerFactory.Instance.GetSharer(sharerType);
         sharer.Share(message);
     }
 }
        public Sharing GetSharer(SharerType sharerType)
        {
            Sharing sharing = null;

            switch (sharerType)
            {
            case SharerType.Facebook: sharing = new FacebookSharer(); break;

            case SharerType.Twitter: sharing = new TwitterSharer(); break;

            default: break;
            }
            return(sharing);
        }
        internal override bool DecodeArgument(byte b)
        {
            switch (_receivedStep)
            {
            case Steps.Status:     // receive status
                _lastValue = new SharerReadVariableReturn();
                Values.Add(_lastValue);

                _lastValue.Status = (SharerReadVariableStatus)b;

                // if the we have a value, go to next step to decode, else stay to have next variable
                if (_lastValue.Status == SharerReadVariableStatus.OK)
                {
                    _lastValueType = _types[Values.Count - 1];
                    _lastValueSize = SharerTypeHelper.Sizeof(_lastValueType);
                    _lastValueBytes.Clear();
                    _receivedStep = Steps.Value;
                }
                else if (Values.Count >= _types.Length)
                {
                    _receivedStep = Steps.End;
                }

                break;

            case Steps.Value:
                _lastValueBytes.Add(b);     // add received byte

                // if enought returned byte, decode it
                if (_lastValueBytes.Count >= _lastValueSize)
                {
                    _lastValue.Value = SharerTypeHelper.Decode(_lastValueType, _lastValueBytes.ToArray());

                    if (Values.Count >= _types.Length)
                    {
                        _receivedStep = Steps.End;
                    }
                    else
                    {
                        _receivedStep = Steps.Status;
                    }
                }
                break;
            }

            return(_receivedStep == Steps.End);
        }
Ejemplo n.º 7
0
        public static object Decode(SharerType type, byte[] buffer)
        {
            using (MemoryStream memory = new MemoryStream(buffer))
            {
                using (BinaryReader reader = new BinaryReader(memory))
                {
                    switch (type)
                    {
                    case SharerType.@bool:
                        return(reader.ReadByte() != 0);

                    case SharerType.@byte:
                        return(reader.ReadByte());

                    case SharerType.@short:
                        return(reader.ReadSByte());

                    case SharerType.@int:
                        return(reader.ReadInt16());

                    case SharerType.@uint:
                        return(reader.ReadUInt16());

                    case SharerType.@long:
                        return(reader.ReadInt32());

                    case SharerType.@ulong:
                        return(reader.ReadUInt32());

                    case SharerType.@float:
                        return(reader.ReadSingle());

                    case SharerType.int64:
                        return(reader.ReadInt64());

                    case SharerType.uint64:
                        return(reader.ReadUInt64());

                    case SharerType.@double:
                        return(reader.ReadDouble());

                    default:
                        return(null);
                    }
                }
            }
        }
 public SharerCallFunctionCommand(byte[] buffer, SharerType returnType)
 {
     _buffer     = buffer;
     _returnType = returnType;
     Return.Type = returnType;
 }