Ejemplo n.º 1
0
        /// <summary>
        /// 发送协议消息
        /// </summary>
        /// <param name="protocol"></param>
        /// <returns></returns>
        public bool Send(CProtocol protocol)
        {
            Int32 num = 0;

            this.m_oSendStream.Clear();
            this.m_oSendStream.Write(num);//写入长度
            int size = this.m_oSendStream.GetSize();

            Monitor.Enter(obj);
            this.m_oSendStream.Write(order++);       //写入发送序列
            Monitor.Exit(obj);
            this.m_oSendStream.Write(protocol.Type); //类型id
            protocol.Serialize(this.m_oSendStream);  //真实协议数据
            int size2 = this.m_oSendStream.GetSize();

            num = size2 - size;
            this.m_oSendStream.Copy(BitConverter.GetBytes(num), 0);//copy头部总长度到发送流中
            bool flag = this.m_oNetwork.Send(this.m_oSendStream.GetBuffer(), 0, this.m_oSendStream.GetSize());

            if (flag && this.m_oObserver != null)
            {
                this.m_oObserver.OnSend(protocol.Type, this.m_oSendStream.GetSize());
            }
            return(flag);
        }