Esempio n. 1
0
        protected bool ProcessBean(NetSession session, IBean bean)         // 同步处理bean,异常会抛出;
        {
            int serial = bean.Serial;

            if (serial < 0)
            {
                BeanContext beanCtx;
                if (_beanCtxMap.TryGetValue(-serial, out beanCtx))
                {
                    _beanCtxMap.Remove(-serial);
                    AnswerDelegate onAnswer = beanCtx.onAnswer;
                    if (onAnswer != null)
                    {
                        try
                        {
                            onAnswer(bean);
                        }
                        catch (Exception) {}
                        return(true);
                    }
                }
            }
            HandlerDelegate handler;

            if (HandlerMap == null || !HandlerMap.TryGetValue(bean.Type(), out handler))
            {
                return(false);
            }
            handler(session, bean);
            return(true);
        }
Esempio n. 2
0
 protected virtual void OnRecvBean(NetSession session, IBean bean)         // 在Tick解协议过程中解出一个bean时回调,默认会同步处理bean并忽略异常;
 {
     try
     {
         ProcessBean(session, bean);
     }
     catch (Exception) {}
 }
Esempio n. 3
0
        public static void Actualizar(IBean bean)
        {
            coreContext coreContext = Session.GetContexto();
            var         set         = coreContext.Set(bean.GetType());

            set.Add(bean);
            coreContext.Entry(bean).State = System.Data.Entity.EntityState.Modified;
        }
Esempio n. 4
0
        }                                                                                                                  // 由Tick方法回调,异常会触发Close(CLOSE_DECODE);

        void OnRecv(NetSession session, int size)
        {
            OctetsStream recvBuf = session.recvBuf;
            OctetsStream os      = OnDecode(session, recvBuf.Array(), recvBuf.Size(), size);

            if (os != null)
            {
                recvBuf.Append(os.Array(), os.Position(), os.Remain());
            }
            else
            {
                recvBuf.Resize(recvBuf.Size() + size);
            }
            int pos = 0;

            try
            {
                while (recvBuf.Remain() >= 4)                 // type+serial+size+bean;
                {
                    int ptype   = recvBuf.UnmarshalUInt();
                    int pserial = recvBuf.UnmarshalInt();
                    int psize   = recvBuf.UnmarshalUInt();
                    if (psize > recvBuf.Remain())
                    {
                        break;
                    }
                    int ppos = recvBuf.Position();
                    pos = ppos + psize;
                    BeanDelegate create;
                    if (BeanMap == null || !BeanMap.TryGetValue(ptype, out create))
                    {
                        OnRecvUnknownBean(session, ptype, pserial, psize);
                        recvBuf.SetPosition(pos);
                    }
                    else
                    {
                        IBean bean = create();
                        bean.Unmarshal(recvBuf);
                        int realsize = recvBuf.Position() - ppos;
                        if (realsize > psize)
                        {
                            throw new Exception("bean realsize overflow: type=" + ptype + ",serial=" + pserial + ",size=" + psize + ",realsize=" + realsize);
                        }
                        bean.Serial = pserial;
                        OnRecvBean(session, bean);
                    }
                }
            }
            catch (MarshalEOFException) {}
            finally
            {
                recvBuf.Erase(0, pos);
                recvBuf.SetPosition(0);
            }
        }
Esempio n. 5
0
 /**
  * 接收到每个完整的bean都会调用此方法;
  * 一般在这里立即同步处理协议,也可以先放到接收队列里,合适的时机处理;
  */
 protected override void OnRecvBean(NetSession session, IBean bean)
 {
     try
     {
         ProcessBean(session, bean);
     }
     catch (Exception e)
     {
         LogException(e);
     }
 }
Esempio n. 6
0
        /*\
        |*| int TEST_CONST1 = 5; // 测试类静态常量;
        |*| string TEST_CONST2 = "test_const2";
        |*| int value1; // 字段的注释;
        |*| long value2;
        \*/

        public static void OnProcess(NetManager.NetSession session, IBean _arg_)
        {
            TestBean arg = (TestBean)_arg_;

            System.Console.WriteLine("{0}.onProcess: arg={1}", arg.GetType().Name, arg);

            RC4Filter filter = new RC4Filter();

            filter.SetInputKey(new byte[] { 1, 2, 3 }, 3);
            filter.SetOutputKey(new byte[] { 1, 2, 3 }, 3);
            ((TestClient)session.manager).SetFilter(filter);

            session.Send(arg);
        }
Esempio n. 7
0
        public HttpResponseMessage movimientosfecha(ConsultaFecha consultaFecha)
        {
            Response    resp     = new Response();
            coreContext contexto = new coreContext();

            Session.FijarContexto(contexto);
            List <tpagmovimiento> movimientos = TpagMovimientoDal.buscar(consultaFecha.identificacion, consultaFecha.finicio, consultaFecha.ffin);
            List <IBean>          reg         = new List <IBean>();

            foreach (tpagmovimiento mov in movimientos)
            {
                IBean b = (IBean)mov;
                reg.Add(b);
            }
            resp.lregistros = reg;

            return(GetResponse(resp));
        }
Esempio n. 8
0
        // 序列化bean,经过OnEncode处理后,放入待发送队列准备发送,调用后可以修改bean;
        public virtual void Send(NetSession session, IBean bean)
        {
            if (session.Closed || bean == null)
            {
                return;
            }
            int          type       = bean.Type();
            int          serial     = bean.Serial;
            int          reserveLen = OctetsStream.MarshalUIntLen(type) + OctetsStream.MarshalLen(serial) + 5;
            OctetsStream buf        = new OctetsStream(reserveLen + bean.InitSize());

            buf.Resize(reserveLen);
            int len = bean.Marshal(buf).Size();
            int pos = 5 - buf.MarshalUIntBack(reserveLen, len - reserveLen);

            buf.Resize(pos);
            buf.MarshalUInt(type).Marshal(serial);
            buf.SetPosition(pos);
            buf.Resize(len);
            OctetsStream os = OnEncode(session, buf.Array(), buf.Position(), buf.Remain());

            SendDirect(session, os ?? buf);
        }
Esempio n. 9
0
 public bool Ask(NetSession session, IBean bean, AnswerDelegate onAnswer = null)
 {
     if (session.Closed || bean == null)
     {
         return(false);
     }
     for (BeanContext beanCtx;;)
     {
         int serial = ++_serialCounter;
         if (serial > 0)
         {
             if (_beanCtxMap.ContainsKey(serial))
             {
                 continue;                                                      // 确保一下;
             }
             _beanCtxMap.Add(serial, beanCtx = new BeanContext(serial, onAnswer));
             _beanCtxQueue.Enqueue(beanCtx);
             bean.Serial = serial;
             Send(session, bean);
             return(true);
         }
         _serialCounter = 0;
     }
 }
Esempio n. 10
0
        /*\
        |*| bool v1; // 1字节布尔,0表示假,1表示真,其它默认表示真;
        |*| sbyte v2; // 1字节整数;
        |*| short v3; // 2字节整数;
        |*| int v4; // 4字节整数;
        |*| long v5; // 8字节整数;
        |*| float v6; // 4字节浮点数;
        |*| double v7; // 8字节浮点数;
        |*| Octets v8; // 二进制数据(Octets);
        |*| string v9; // 字符串(String);
        |*| List<bool> v10; // 数组容器(ArrayList);
        |*| LinkedList<sbyte> v11; // 链表容器(LinkedList);
        |*| LinkedList<int> v12; // 队列容器(ArrayDeque);
        |*| HashSet<long> v13; // 无序集合容器(HashSet);
        |*| HashSet<float> v14; // 排序集合容器(TreeSet);
        |*| HashSet<double> v15; // 有序集合容器(LinkedHashSet);
        |*| Dictionary<long, string> v16; // 无序映射容器(HashMap);
        |*| SortedDictionary<TestBean, bool> v17; // 排序映射容器(TreeMap);
        |*| Dictionary<Octets, TestBean> v18; // 有序映射容器(LinkedHashMap);
        |*| TestBean v19; // 嵌入其它bean;
        \*/

        public static void OnProcess(NetManager.NetSession session, IBean _arg_)
        {
            TestType arg = (TestType)_arg_;

            System.Console.WriteLine("{0}.onProcess: arg={1}", arg.GetType().Name, arg);
        }
Esempio n. 11
0
 public void Send(IBean bean)
 {
     manager.Send(this, bean);
 }
Esempio n. 12
0
 public int CompareTo(IBean b)
 {
     throw new NotSupportedException();
 }
Esempio n. 13
0
 public int CompareTo(IBean b)
 {
     return(b is TestEmpty?CompareTo((TestEmpty)b) : 1);
 }
Esempio n. 14
0
 public int CompareTo(IBean b)
 {
     return(b is TestType?CompareTo((TestType)b) : 1);
 }
 public StandardBeanDispencer(IBean bean)
 {
     BeanType      = bean;
     DispencerSize = 20;
 }
Esempio n. 16
0
 public int CompareTo(IBean b)
 {
     return(b is TestBean?CompareTo((TestBean)b) : 1);
 }