private static Action getAction(NetMessage message)
        {
            Action action = new Action();
            ActionType actionType = translate( message.Action.Action );
            action.Action_type = actionType;

            switch(actionType)
            {
                case ActionType.PUBLISH:
                    action.Publish = getPublishMessage(message);
                    break;
                case ActionType.POLL:
                    action.Poll = getPollMessage(message);
                    break;
                case ActionType.ACKNOWLEDGE:
                    action.Ack_message = getAcknowledgeMessage(message);
                    break;
                case ActionType.SUBSCRIBE:
                    action.Subscribe = getSubscribeMessage(message);
                    break;
                case ActionType.UNSUBSCRIBE:
                    action.Unsubscribe = getUnsubscribeMessage(message);
                    break;
                case ActionType.PING:
                    action.Ping = getPingMessage(message);
                    break;
                case ActionType.AUTH:
                    action.Auth = getAuthMessage(message);
                    break;
                default:
                    throw new Exception("Unexpected ActionType while marshalling message " + actionType.ToString() );
            }

            return action;
        }
        public static Atom translate(NetMessage message)
        {
            Atom atom = new Atom();

            Action action = getAction(message);
            Header header = getHeaders(message);

            atom.Action = action;
            atom.Header = header;

            return(atom);
        }
        private static Action getAction(NetMessage message)
        {
            Action     action     = new Action();
            ActionType actionType = translate(message.Action.Action);

            action.Action_type = actionType;

            switch (actionType)
            {
            case ActionType.PUBLISH:
                action.Publish = getPublishMessage(message);
                break;

            case ActionType.POLL:
                action.Poll = getPollMessage(message);
                break;

            case ActionType.ACKNOWLEDGE:
                action.Ack_message = getAcknowledgeMessage(message);
                break;

            case ActionType.SUBSCRIBE:
                action.Subscribe = getSubscribeMessage(message);
                break;

            case ActionType.UNSUBSCRIBE:
                action.Unsubscribe = getUnsubscribeMessage(message);
                break;

            case ActionType.PING:
                action.Ping = getPingMessage(message);
                break;

            case ActionType.AUTH:
                action.Auth = getAuthMessage(message);
                break;

            default:
                throw new Exception("Unexpected ActionType while marshalling message " + actionType.ToString());
            }


            return(action);
        }