Пример #1
0
        public static string Serialize(ArmaArray array)
        {
            var data = new StringBuilder();

            data.Append("[");
            if (array == null)
            {
                data.Append("]");
                return(data.ToString());
            }
            foreach (var d in array)
            {
                if (d is string)
                {
                    data.Append("\"");
                    var s = d as string;
                    data.Append(s);
                    data.Append("\"");
                }
                else if (d is int || d is double || d is bool)
                {
                    data.Append(d);
                }
                else if (d is ArmaArray)
                {
                    var a = d as ArmaArray;
                    data.Append(Serialize(a));
                }
                data.Append(",");
            }
            if (data[data.Length - 1] == ',')
            {
                data.Length--;
            }
            data.Append("]");
            return(data.ToString());
        }
Пример #2
0
        public Request(string request)
        {
            var parts = request.Split(Manager.Seperator);

            switch (parts[0].ToUpper())
            {
            case "SET":
                _command = Commands.Set;
                break;

            case "GETSYNC":
                _command = Commands.GetSync;
                break;

            case "GETASYNC":
                _command = Commands.GetAsync;
                break;

            case "DEL":
                _command = Commands.Del;
                break;

            case "EXPIRE":
                _command = Commands.Expire;
                break;

            case "GETBIT":
                _command = Commands.GetBit;
                break;

            case "RESPONSE":
                _command = Commands.Response;
                break;

            default:
                throw new RequestException("Unknown packet type");
                break;
            }

            try
            {
                switch (_command)
                {
                case Commands.Set:
                    _table      = parts[1].ToUpper();
                    _instanceId = parts[2];
                    _expiry     = Convert.ToInt32(parts[3]);
                    _data       = ArmaArray.Unserialize(parts[4]);
                    break;

                case Commands.GetSync:
                case Commands.GetAsync:
                case Commands.Del:
                    _table      = parts[1].ToUpper();
                    _instanceId = parts[2];
                    break;

                case Commands.Expire:
                    _table      = parts[1].ToUpper();
                    _instanceId = parts[2];
                    _expiry     = Convert.ToInt32(parts[3]);
                    break;

                case Commands.GetBit:
                    _table      = parts[1].ToUpper();
                    _instanceId = parts[2];
                    _bit        = Convert.ToInt32(parts[3]);
                    break;

                case Commands.Response:
                    _tid  = Convert.ToInt32(parts[1]);
                    _part = Convert.ToInt32(parts[2]);
                    break;
                }
            }
            catch (Exception ex)
            {
                throw new RequestException(String.Format("Request Error: {0} - {1}", ex.Message, request));
            }
        }
Пример #3
0
        public static ArmaArray Unserialize(string strarray)
        {
            if (strarray.ElementAt(0) != '[')
            {
                throw new ArmaArrayException("String does not start with a [");
            }
            strarray = strarray.Substring(1);

            var array = new ArmaArray();
            var nums  = new[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.', '-', 'e' };

            for (var i = 0; i < strarray.Length; i++)
            {
                switch (strarray[i])
                {
                case '[':
                {
                    var str   = new StringBuilder();
                    var inArr = 0;
                    while (true)
                    {
                        if (strarray[i] == '[')
                        {
                            inArr++;
                        }
                        if (strarray[i] == ']')
                        {
                            inArr--;
                        }
                        str.Append(strarray[i]);
                        i++;
                        if (inArr == 0)
                        {
                            break;
                        }
                    }
                    List <object> innerArray = Unserialize(str.ToString());
                    array.Add(innerArray);
                }
                break;

                case '"':
                {
                    var str   = new StringBuilder();
                    var isEnd = false;
                    i++;
                    while (true)
                    {
                        try
                        {
                            if (strarray[i] == '"')
                            {
                                isEnd = !isEnd;
                            }
                        }
                        catch
                        {
                            break;
                        }
                        if (isEnd && (strarray[i] == ',' || strarray[i] == ']'))
                        {
                            break;
                        }
                        str.Append(strarray[i]);
                        i++;
                    }
                    array.Add(str.ToString().TrimEnd('"'));
                }
                break;

                default:
                    if (nums.Contains(strarray[i]))
                    {
                        var str     = new StringBuilder();
                        var isFloat = false;
                        while (nums.Contains(strarray[i]))
                        {
                            if (strarray[i] == '.')
                            {
                                isFloat = true;
                            }
                            str.Append(strarray[i]);
                            i++;
                        }
                        if (isFloat)
                        {
                            var num = Convert.ToDouble(str.ToString());
                            array.Add(num);
                        }
                        else
                        {
                            var num = Convert.ToInt32(str.ToString());
                            array.Add(num);
                        }
                    }
                    else if (Substring(strarray, i, 4).ToLower() == "true")
                    {
                        array.Add(true);
                        i = i + 4;
                    }
                    else if (Substring(strarray, i, 5).ToLower() == "false")
                    {
                        array.Add(false);
                        i = i + 5;
                    }
                    break;
                }
            }
            return(array);
        }