KeepAlive() private method

Generates Keep Alive S-frame.
private KeepAlive ( ) : byte
return byte
コード例 #1
0
ファイル: GXDLMSServer.cs プロジェクト: 01F0/Gurux.DLMS.Net
        ///<summary>
        /// Get packet from received data.
        ///</summary>
        ///<param name="buff">
        /// Received data. </param>
        ///<returns>
        ///Reply if any.
        ///</returns>
        private byte[] GetPacket(byte[] buff)
        {
            GXByteBuffer receivedFrame = new GXByteBuffer(buff);
            // Save position where data was. This is used if data is not sent to
            // this server.
            ushort offset = Reply.Data.Size;

            GXDLMS.GetData(Settings, receivedFrame, Reply);
            // If all data is not received yet.
            if (!Reply.IsComplete)
            {
                return(null);
            }
            byte[] data;
            // If client sends keepalive or get next frame request.
            if ((Reply.MoreData & RequestTypes.Frame) != 0)
            {
                if (Frames != null && Frames.Length > FrameIndex)
                {
                    data = Frames[FrameIndex++];
                    return(data);
                }
                FrameIndex = 0;
                data       = GXDLMS.SplitToHdlcFrames(Settings, Settings.KeepAlive(), null)[0];
                return(data);
            }

            // Check is data sent to this server.
            if (ConnectedServerAddress == 0 || ConnectedClientAddress == 0)
            {
                // Check is data send to this server.
                if (!IsTarget(Settings.ServerAddress, Settings.ClientAddress))
                {
                    Reply.Data.Size  = offset;
                    Reply.IsComplete = false;
                }
                ConnectedServerAddress = Settings.ServerAddress;
                ConnectedClientAddress = Settings.ClientAddress;
            }
            else if (Settings.ServerAddress != ConnectedServerAddress ||
                     Settings.ClientAddress != ConnectedClientAddress)
            {
                Reply.Data.Size  = offset;
                Reply.IsComplete = false;
            }


            // Clear received data.
            receivedFrame.Clear();
            ServerReply.Data = Reply.Data;
            FrameIndex       = 0;
            return(null);
        }