Esempio n. 1
0
        /// <summary>set topics field</summary>
        /// <param name="args">
        /// REQUEST: [14, msgId, path, fieldName, value]
        /// RESPONSE: [3, msgId, success, [errorMsg] ]
        /// </param>
        private void SetField(EsMessage msg)
        {
            if (msg.Count != 5 || !msg[1].IsNumber || msg[2].ValueType != JSC.JSValueType.String || msg[3].ValueType != JSC.JSValueType.String)
            {
                if (_basePl.verbose)
                {
                    Log.Warning("Syntax error: {0}", msg);
                }
                return;
            }
            Topic t = Topic.root.Get(msg[2].Value as string, false, _owner);

            if (t != null)
            {
                if (t.TrySetField(msg[3].Value as string, msg[4], _owner))
                {
                    msg.Response(3, msg[1], true);
                }
                else
                {
                    msg.Response(3, msg[1], false, "FieldAccessError");
                }
            }
            else
            {
                msg.Response(3, msg[1], false, "TopicNotExist");
            }
        }
Esempio n. 2
0
 /// <summary>Read old log entrys</summary>
 /// <param name="msg">Req: [91, Date. count]</param>
 private void History(EsMessage msg)
 {
     if (msg.Count != 3 || msg[1].ValueType != JSC.JSValueType.Date || !msg[2].IsNumber)
     {
         if (_basePl.verbose)
         {
             Log.Warning("Syntax error: {0}", msg);
         }
         return;
     }
     try {
         if (Log.History != null)
         {
             var resp = Log.History((msg[1].Value as JSL.Date).ToDateTime(), (int)msg[2]);
             foreach (var e in resp)
             {
                 base.SendArr(new JSL.Array {
                     90, JSC.JSValue.Marshal(e.dt), (int)e.ll, e.format
                 }, false);
             }
         }
     }
     catch (Exception ex) {
         Log.Warning("History({0}) - {1}", msg[1].Value as string, ex.Message);
     }
 }
Esempio n. 3
0
 /// <summary>Create topic</summary>
 /// <param name="args">
 /// REQUEST: [8, msgId, path, state, manifest]
 /// </param>
 private void Create(EsMessage msg)
 {
     if (msg.Count < 4 || !msg[1].IsNumber || msg[2].ValueType != JSC.JSValueType.String)
     {
         if (_basePl.verbose)
         {
             Log.Warning("Syntax error: {0}", msg);
         }
         return;
     }
     Create(Topic.root, msg[2].Value as string, msg[3], (msg[4].ValueType == JSC.JSValueType.Object && msg[4].Value != null) ? msg[4] : null);
 }
Esempio n. 4
0
        /// <summary>Remove topic</summary>
        /// <param name="args">
        /// REQUEST: [12, msgId, path]
        /// </param>
        private void Remove(EsMessage msg)
        {
            if (msg.Count != 3 || !msg[1].IsNumber || msg[2].ValueType != JSC.JSValueType.String)
            {
                if (_basePl.verbose)
                {
                    Log.Warning("Syntax error: {0}", msg);
                }
                return;
            }
            Topic t = Topic.root.Get(msg[2].Value as string, false, _owner);

            if (t != null)
            {
                t.Remove(_owner);
            }
        }
Esempio n. 5
0
 /// <summary>Import</summary>
 /// <param name="msg">
 /// Command: [16, FileName, payload(Base64)]
 /// </param>
 private void Import(EsMessage msg)
 {
     if (msg.Count != 3 || msg[1].ValueType != JSC.JSValueType.String || msg[2].ValueType != JSC.JSValueType.String)
     {
         if (_basePl.verbose)
         {
             Log.Warning("Syntax error: {0}", msg);
         }
         return;
     }
     try {
         var str = Encoding.UTF8.GetString(Convert.FromBase64String(msg[2].Value as string));
         using (var sr = new StringReader(str)) {
             Repo.Import(sr, null);
         }
     }
     catch (Exception ex) {
         Log.Warning("Import({0}) - {1}", msg[1].Value as string, ex.Message);
     }
 }
Esempio n. 6
0
        /// <summary>Move topic</summary>
        /// <param name="args">
        /// REQUEST: [10, msgId, path source, path destinations parent, new name(optional rename)]
        /// </param>
        private void Move(EsMessage msg)
        {
            if (msg.Count < 4 || msg.Count > 5 || !msg[1].IsNumber || msg[2].ValueType != JSC.JSValueType.String || msg[3].ValueType != JSC.JSValueType.String ||
                (msg.Count == 5 && msg[4].ValueType != JSC.JSValueType.String))
            {
                if (_basePl.verbose)
                {
                    Log.Warning("Syntax error: {0}", msg);
                }
                return;
            }
            Topic t = Topic.root.Get(msg[2].Value as string, false, _owner);
            Topic p = Topic.root.Get(msg[3].Value as string, false, _owner);

            if (t != null && p != null)
            {
                string nname = msg.Count == 5 ? (msg[4].Value as string) : t.name;
                t.Move(p, nname, _owner);
            }
        }
Esempio n. 7
0
        /// <summary>set topics state</summary>
        /// <param name="args">
        /// REQUEST: [6, msgId, path, value]
        /// RESPONSE: [3, msgId, success, [errorMsg] ]
        /// </param>
        private void SetState(EsMessage msg)
        {
            if (msg.Count != 4 || !msg[1].IsNumber || msg[2].ValueType != JSC.JSValueType.String)
            {
                if (_basePl.verbose)
                {
                    Log.Warning("Syntax error: {0}", msg);
                }
                return;
            }
            string path = msg[2].Value as string;

            Topic t = Topic.root.Get(path, false, _owner);

            if (t != null)
            {
                t.SetState(msg[3], _owner);
                msg.Response(3, msg[1], true);
            }
            else
            {
                msg.Response(3, msg[1], false, "TopicNotExist");
            }
        }
Esempio n. 8
0
        /// <summary>Subscribe topics</summary>
        /// <param name="args">
        /// REQUEST:  [4, msgId, path, mask], mask: 1 - data, 2 - children
        /// RESPONSE: [3, msgId, success, exist]
        /// </param>
        private void Subscribe(EsMessage msg)
        {
            if (msg.Count != 4 || !msg[1].IsNumber || msg[2].ValueType != JSC.JSValueType.String || !msg[3].IsNumber)
            {
                if (_basePl.verbose)
                {
                    Log.Warning("Syntax error: {0}", msg);
                }
                return;
            }
            Topic parent = Topic.root.Get(msg[2].Value as string, false, _owner);

            if (parent != null)
            {
                var sr1 = parent.Subscribe(SubRec.SubMask.Value | SubRec.SubMask.Field | SubRec.SubMask.Once | SubRec.SubMask.Chldren, string.Empty, _subCB);
                lock (_subscriptions) {
                    _subscriptions.Add(new Tuple <SubRec, EsMessage>(sr1, msg));
                }
            }
            else
            {
                msg.Response(3, msg[1], true, false);
            }
        }
Esempio n. 9
0
        private void RcvMsg(EsMessage msg)
        {
            if (msg.Count == 0)
            {
                return;
            }
            try {
                if (msg[0].IsNumber)
                {
                    switch ((int)msg[0])
                    {
                    case 4:
                        this.Subscribe(msg);
                        break;

                    case 6:
                        this.SetState(msg);
                        break;

                    case 8:
                        this.Create(msg);
                        break;

                    case 10:
                        this.Move(msg);
                        break;

                    case 12:
                        this.Remove(msg);
                        break;

                    case 14:
                        this.SetField(msg);
                        break;

                    case 16:
                        this.Import(msg);
                        break;

                    case 91:
                        this.History(msg);
                        break;

                    case 99: {
                        var o = Interlocked.Exchange(ref _owner, null);
                        if (o != null)
                        {
                            Log.Write -= Log_Write;
                            Log.Info("{0} connection dropped", o.path);
                            o.Remove(o); //-V3062
                            lock (_subscriptions) {
                                foreach (var sr in _subscriptions)
                                {
                                    sr.Item1.Dispose();
                                }
                            }
                        }
                    }
                    break; // Disconnect
                    }
                }
                else
                {
                    _basePl.AddRMsg(msg);
                }
            }
            catch (Exception ex) {
                if (_basePl.verbose)
                {
                    Log.Warning("{0} - {1}", msg, ex);
                }
            }
        }
Esempio n. 10
0
 internal void AddRMsg(EsMessage msg)
 {
     _msgs.Add(msg);
 }