/**
         * <summary>
         * Wraps topology request into a protocol message.</summary>
         *
         * <param name="req">Topology request that need to be wrapped.</param>
         * <returns>Wrapped message.</returns>
         */
        private static ProtoRequest WrapTopologyRequest(GridClientTopologyRequest req)
        {
            ProtoTopologyRequest.Builder builder = ProtoTopologyRequest.CreateBuilder()
                                                   .SetIncludeAttributes(req.IncludeAttributes)
                                                   .SetIncludeMetrics(req.IncludeMetrics);

            if (req.NodeId != null && !req.NodeId.Equals(ZERO_GUID))
            {
                builder.SetNodeId(req.NodeId.ToString());
            }

            if (req.NodeIP != null)
            {
                builder.SetNodeIp(req.NodeIP);
            }

            return(WrapRequest(req, builder.Build()));
        }
        /**
         * <summary>
         * Wraps topology request into a protocol message.</summary>
         *
         * <param name="req">Topology request that need to be wrapped.</param>
         * <returns>Wrapped message.</returns>
         */
        private static GridClientTopologyRequest WrapTopologyRequest(ProtoRequest req)
        {
            ProtoTopologyRequest data = ProtoTopologyRequest.ParseFrom(req.Body);

            GridClientTopologyRequest bean = new GridClientTopologyRequest(Guid.Empty);

            bean.IncludeAttributes = data.IncludeAttributes;
            bean.IncludeMetrics    = data.IncludeMetrics;

            if (data.HasNodeId)
            {
                bean.NodeId = Guid.Parse(data.NodeId);
            }

            if (data.HasNodeIp)
            {
                bean.NodeIP = data.NodeIp;
            }

            return(WrapRequest(bean, req));
        }