	public:
		int userid;
		int localsid;
		int remain_time;
		int free_time_left;
		int free_time_end;
		enum { PROTOCOL_TYPE = PROTOCOL_UPDATEREMAINTIME };
	public:
		UpdateRemainTime() { type = PROTOCOL_UPDATEREMAINTIME; }
		UpdateRemainTime(void*) : Protocol(PROTOCOL_UPDATEREMAINTIME) { }
		UpdateRemainTime (int l_userid,int l_localsid = -1,int l_remain_time = 0,
			int l_free_time_left = 0,int l_free_time_end = 0)
			 : userid(l_userid),localsid(l_localsid),remain_time(l_remain_time)
			,free_time_left(l_free_time_left),free_time_end(l_free_time_end)
		{
			type = PROTOCOL_UPDATEREMAINTIME;
		}

		UpdateRemainTime(const UpdateRemainTime &rhs)
			: Protocol(rhs),userid(rhs.userid),localsid(rhs.localsid),remain_time(rhs.remain_time)
			,free_time_left(rhs.free_time_left),free_time_end(rhs.free_time_end) { }

		GNET::Protocol *Clone() const { return new UpdateRemainTime(*this); }

		OctetsStream& marshal(OctetsStream & os) const
		{
			os << userid;
			os << localsid;
			os << remain_time;
			os << free_time_left;
			os << free_time_end;
			return os;
		}

		const OctetsStream& unmarshal(const OctetsStream &os)
		{
			os >> userid;
			os >> localsid;
			os >> remain_time;
			os >> free_time_left;
			os >> free_time_end;
			return os;
		}

		int PriorPolicy( ) const { return 1; }

		bool SizePolicy(size_t size) const { return size <= 64; }