protected override void DoWork() { if (Session == null) { return; } while (Session.IncomingMessageQueue.Count > 0) { Message msg; if (!Session.IncomingMessageQueue.TryDequeue(out msg)) { continue; } Message transformed; IMessageParseFactory factory; if (!MessageFactories.TryGetValue(msg.MessageOpCode, out factory) || !factory.TryParse(msg.MessageOpCode, msg, out transformed)) { if (!FallbackFactory.TryParse(msg.MessageOpCode, msg, out transformed)) { long tmpVal; if (long.TryParse(msg.MessageOpCodeEnum.ToString(), out tmpVal)) { _msgLogger.Trace(BitConverter.ToString(msg.Data).Replace("-", "")); _msgLogger.Trace("{0}", msg.OpcodeCount); _msgLogger.Trace("{0}", msg.SourcePacketType); } continue; } } Messages.Add(transformed); //Func<Message, Message> createFunc = null; //Message transformed = null; //if (RegisteredObjects.TryGetValue(msg.MessageOpCode, out createFunc) && // (transformed = createFunc(msg)) != null) //{ // Messages.Add(transformed); SceneCreateObject obj = transformed as SceneCreateObject; if (obj != null) { string objToCreate = null; if (_crcMap.TryGetValue((uint)obj.ObjectCRC, out objToCreate)) { _creatObjlogger.Debug("create obj {0}", objToCreate); } } if (msg.MessageOpCodeEnum == MessageOp.CmdStartScene) { _logger.Info("Got scene start! Trn: {0}", ((SceneStart)transformed).TerrainMap); } //} //else //{ // _logger.Warn("Unable to find registered message factory for {0}({1:X})", msg.MessageOpCodeEnum, msg.MessageOpCode); //} } Thread.Sleep(300); }