// ServerInfo.cpp #include "RequestFlattener.h" #include "RequestUnflattener.h" #include "ServerInfo.h" // VisitString static void VisitString(RequestMember* member, RequestMemberVisitor* visitor, HashString& string) { StringData stringData; stringData.SetTo(string.GetString()); visitor->Visit(member, stringData); } // #pragma mark - // #pragma mark ----- ShareInfo ----- // constructor ShareInfo::ShareInfo() : FlattenableRequestMember(), fShareName() { } // IsValid bool ShareInfo::IsValid() const { return (fShareName.GetLength() > 0); } // ShowAround void ShareInfo::ShowAround(RequestMemberVisitor* visitor) { VisitString(this, visitor, fShareName); } // Flatten status_t ShareInfo::Flatten(RequestFlattener* flattener) { return flattener->WriteString(fShareName.GetString()); } // Unflatten status_t ShareInfo::Unflatten(RequestUnflattener* unflattener) { return unflattener->ReadString(fShareName); } // SetShareName status_t ShareInfo::SetShareName(const char* shareName) { return (fShareName.SetTo(shareName) ? B_OK : B_NO_MEMORY); } // GetShareName const char* ShareInfo::GetShareName() const { return fShareName.GetString(); } // #pragma mark - // #pragma mark ----- ServerInfo ----- // constructor ServerInfo::ServerInfo() : FlattenableRequestMember(), fServerName(), fConnectionMethod(), fShareInfos() { } // constructor ServerInfo::ServerInfo(const ServerInfo& other) : FlattenableRequestMember(), fServerName(), fConnectionMethod(), fShareInfos() { (*this) = other; } // ShowAround void ServerInfo::ShowAround(RequestMemberVisitor* visitor) { VisitString(this, visitor, fServerName); VisitString(this, visitor, fConnectionMethod); int32 count = fShareInfos.Count(); visitor->Visit(this, count); for (int32 i = 0; i < count; i++) visitor->Visit(this, fShareInfos.ElementAt(i)); } // Flatten status_t ServerInfo::Flatten(RequestFlattener* flattener) { flattener->WriteString(fServerName.GetString()); flattener->WriteString(fConnectionMethod.GetString()); int32 count = fShareInfos.Count(); flattener->WriteInt32(count); for (int32 i = 0; i < count; i++) flattener->Visit(this, fShareInfos.ElementAt(i)); return flattener->GetStatus(); } // Unflatten status_t ServerInfo::Unflatten(RequestUnflattener* unflattener) { unflattener->ReadString(fServerName); unflattener->ReadString(fConnectionMethod); int32 count; if (unflattener->ReadInt32(count) != B_OK) return unflattener->GetStatus(); for (int32 i = 0; i < count; i++) { ShareInfo info; unflattener->Visit(this, info); if (info.IsValid()) AddShare(info.GetShareName()); } return unflattener->GetStatus(); } // SetServerName status_t ServerInfo::SetServerName(const char* serverName) { return (fServerName.SetTo(serverName) ? B_OK : B_NO_MEMORY); } // GetServerName const char* ServerInfo::GetServerName() const { return fServerName.GetString(); } // SetConnectionMethod status_t ServerInfo::SetConnectionMethod(const char* connectionMethod) { return (fConnectionMethod.SetTo(connectionMethod) ? B_OK : B_NO_MEMORY); } // GetConnectionMethod const char* ServerInfo::GetConnectionMethod() const { return fConnectionMethod.GetString(); } // AddShare status_t ServerInfo::AddShare(const char* shareName) { ShareInfo shareInfo; status_t error = shareInfo.SetShareName(shareName); if (error == B_OK) error = fShareInfos.PushBack(shareInfo); return error; } // CountShares int32 ServerInfo::CountShares() const { return fShareInfos.Count(); } // ShareInfoAt const ShareInfo& ServerInfo::ShareInfoAt(int32 index) const { return fShareInfos.ElementAt(index); } // = ServerInfo& ServerInfo::operator=(const ServerInfo& other) { fServerName = other.fServerName; fConnectionMethod = other.fConnectionMethod; fShareInfos.MakeEmpty(); int32 count = other.fShareInfos.Count(); for (int32 i = 0; i < count; i++) fShareInfos.PushBack(other.fShareInfos.ElementAt(i)); return *this; }