예제 #1
0
    /// <summary>
    /// 写入字节流(简版)
    /// </summary>
    protected override void toWriteBytesSimple(BytesWriteStream stream)
    {
        stream.writeInt(this.type);

        stream.writeUTF(this.text);

        if (this.elements != null)
        {
            stream.writeBoolean(true);
            stream.writeLen(this.elements.size());
            if (!this.elements.isEmpty())
            {
                ChatElementData[] elementsVValues = this.elements.getValues();
                for (int elementsVI = 0, elementsVLen = this.elements.length(); elementsVI < elementsVLen; ++elementsVI)
                {
                    ChatElementData elementsV = elementsVValues[elementsVI];
                    if (elementsV != null)
                    {
                        stream.writeBoolean(true);
                        stream.writeDataSimpleNotNull(elementsV);
                    }
                    else
                    {
                        stream.writeBoolean(false);
                    }
                }
            }
        }
        else
        {
            stream.writeBoolean(false);
        }
    }
예제 #2
0
    /// <summary>
    /// 是否数据一致
    /// </summary>
    protected override bool toDataEquals(BaseData data)
    {
        ChatElementData mData = (ChatElementData)data;

        if (this.type != mData.type)
        {
            return(false);
        }

        return(true);
    }
예제 #3
0
    /// <summary>
    /// 复制(深拷贝)
    /// </summary>
    protected override void toCopy(BaseData data)
    {
        if (!(data is ChatElementData))
        {
            return;
        }

        ChatElementData mData = (ChatElementData)data;

        this.type = mData.type;
    }
예제 #4
0
    /// <summary>
    /// 转文本输出
    /// </summary>
    protected override void toWriteDataString(DataWriter writer)
    {
        writer.writeTabs();
        writer.sb.Append("type");
        writer.sb.Append(':');
        writer.sb.Append(this.type);

        writer.writeEnter();
        writer.writeTabs();
        writer.sb.Append("text");
        writer.sb.Append(':');
        writer.sb.Append(this.text);

        writer.writeEnter();
        writer.writeTabs();
        writer.sb.Append("elements");
        writer.sb.Append(':');
        writer.sb.Append("List<ChatElementData>");
        if (this.elements != null)
        {
            SList <ChatElementData> elementsT = this.elements;
            int elementsLen = elementsT.size();
            writer.sb.Append('(');
            writer.sb.Append(elementsLen);
            writer.sb.Append(')');
            writer.writeEnter();
            writer.writeLeftBrace();
            for (int elementsI = 0; elementsI < elementsLen; ++elementsI)
            {
                ChatElementData elementsV = elementsT.get(elementsI);
                writer.writeTabs();
                writer.sb.Append(elementsI);
                writer.sb.Append(':');
                if (elementsV != null)
                {
                    elementsV.writeDataString(writer);
                }
                else
                {
                    writer.sb.Append("ChatElementData=null");
                }

                writer.writeEnter();
            }
            writer.writeRightBrace();
        }
        else
        {
            writer.sb.Append("=null");
        }

        writer.writeEnter();
    }
예제 #5
0
    /// <summary>
    /// 复制(深拷贝)
    /// </summary>
    protected override void toCopy(BaseData data)
    {
        if (!(data is ChatData))
        {
            return;
        }

        ChatData mData = (ChatData)data;

        this.type = mData.type;

        this.text = mData.text;

        if (mData.elements != null)
        {
            if (this.elements != null)
            {
                this.elements.clear();
                this.elements.ensureCapacity(mData.elements.size());
            }
            else
            {
                this.elements = new SList <ChatElementData>();
            }

            SList <ChatElementData> elementsT = this.elements;
            if (!mData.elements.isEmpty())
            {
                ChatElementData[] elementsVValues = mData.elements.getValues();
                for (int elementsVI = 0, elementsVLen = mData.elements.length(); elementsVI < elementsVLen; ++elementsVI)
                {
                    ChatElementData elementsV = elementsVValues[elementsVI];
                    ChatElementData elementsU;
                    if (elementsV != null)
                    {
                        elementsU = (ChatElementData)elementsV.clone();
                    }
                    else
                    {
                        elementsU = null;
                    }

                    elementsT.add(elementsU);
                }
            }
        }
        else
        {
            this.elements = null;
        }
    }
예제 #6
0
    /// <summary>
    /// 读取字节流(完整版)
    /// </summary>
    protected override void toReadBytesFull(BytesReadStream stream)
    {
        stream.startReadObj();

        this.type = stream.readInt();

        this.text = stream.readUTF();

        if (stream.readBoolean())
        {
            int elementsLen = stream.readLen();
            if (this.elements != null)
            {
                this.elements.clear();
                this.elements.ensureCapacity(elementsLen);
            }
            else
            {
                this.elements = new SList <ChatElementData>();
            }

            SList <ChatElementData> elementsT = this.elements;
            for (int elementsI = elementsLen - 1; elementsI >= 0; --elementsI)
            {
                ChatElementData elementsV;
                if (stream.readBoolean())
                {
                    BaseData elementsVT = stream.readDataFullNotNull();
                    if (elementsVT != null)
                    {
                        if (elementsVT is ChatElementData)
                        {
                            elementsV = (ChatElementData)elementsVT;
                        }
                        else
                        {
                            elementsV = new ChatElementData();
                            if (!(elementsVT.GetType().IsAssignableFrom(typeof(ChatElementData))))
                            {
                                stream.throwTypeReadError(typeof(ChatElementData), elementsVT.GetType());
                            }
                            elementsV.shadowCopy(elementsVT);
                        }
                    }
                    else
                    {
                        elementsV = null;
                    }
                }
                else
                {
                    elementsV = null;
                }

                elementsT.add(elementsV);
            }
        }
        else
        {
            this.elements = null;
        }

        stream.endReadObj();
    }
예제 #7
0
    /// <summary>
    /// 是否数据一致
    /// </summary>
    protected override bool toDataEquals(BaseData data)
    {
        ChatData mData = (ChatData)data;

        if (this.type != mData.type)
        {
            return(false);
        }

        if (this.text != mData.text)
        {
            return(false);
        }

        if (mData.elements != null)
        {
            if (this.elements == null)
            {
                return(false);
            }
            if (this.elements.size() != mData.elements.size())
            {
                return(false);
            }
            SList <ChatElementData> elementsT = this.elements;
            SList <ChatElementData> elementsR = mData.elements;
            int elementsLen = elementsT.size();
            for (int elementsI = 0; elementsI < elementsLen; ++elementsI)
            {
                ChatElementData elementsU = elementsT.get(elementsI);
                ChatElementData elementsV = elementsR.get(elementsI);
                if (elementsV != null)
                {
                    if (elementsU == null)
                    {
                        return(false);
                    }
                    if (!elementsU.dataEquals(elementsV))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (elementsU != null)
                    {
                        return(false);
                    }
                }
            }
        }
        else
        {
            if (this.elements != null)
            {
                return(false);
            }
        }

        return(true);
    }