示例#1
0
        /// <summary>执行指令</summary>
        public override void ExecuteCommand(TGGSession session, BinaryRequestInfo requestInfo)
        {
#if DEBUG
            //XTrace.WriteLine("接收数据:{0}", BitConverter.ToString(requestInfo.Body, 0, requestInfo.Body.Length));
            session.Logger.Debug(string.Format("接收数据:{0}", BitConverter.ToString(requestInfo.Body, 0, requestInfo.Body.Length)));
#endif
            try
            {
                var sobj = new SocketObjectData {
                    session = session, requestInfo = requestInfo
                };

                var _temp = new CancellationTokenSource();
                new Task(m =>
                {
                    var model = m as SocketObjectData;

                    if (model == null)
                    {
                        return;
                    }
                    if (model.requestInfo.Body.Length <= 0)
                    {
                        return;
                    }
                    var stream    = new MemoryStream(model.requestInfo.Body, 0, model.requestInfo.Body.Length);
                    var byteArray = new ByteArray(stream);
                    var dy        = byteArray.ReadObject();
                    var retype    = dy.GetType().Name;
                    //判断接收数据类型
                    ASObject obj;
                    switch (retype)
                    {
                    case "ASObject": { obj = (ASObject)dy; break; }

                    case "ProtocolVo": { obj = AMFConvert.ToASObject(dy); break; }

                    default: { return; }
                    }
                    var pv = AutoParseAsObject <ProtocolVo> .Parse(obj);
                    if (pv.className != "ProtocolVo")
                    {
                        return;
                    }
                    ModuleQueue.GetInstance().LoadQueue(pv.moduleNumber, pv, model.session);
#if DEBUG
                    XTrace.WriteLine("Socket Handle接收数据Number:{0} - {1}", pv.moduleNumber, pv.commandNumber);
#endif

                    _temp.Cancel();
                }, sobj, _temp.Token).Start();
            }
            catch (Exception ex) { XTrace.WriteException(ex); }
        }
示例#2
0
 /// <summary>ModuleQueue单体模式</summary>
 public static ModuleQueue GetInstance()
 {
     return(ObjInstance ?? (ObjInstance = new ModuleQueue()));
 }