Re: [bme-develop] Profile information
Status: Planning
Brought to you by:
sirmik
|
From: Simon T. <sim...@ga...> - 2004-08-13 15:49:01
|
I haven't looked in detail, but how about creating a function like
(completely untested code):
void GetProfileInt(const BString* msgBody, const char* field, int*
destinationInt)
{
int32 fieldStart = msgBody.FindFirst(field);
if (fieldStart != B_ERROR)
{
fieldStart += strlen(fieldStart);
int32 fieldEnd = msgBody.FindFirst("\r\n",fieldStart);
BString intField;
msgBody->CopyInto(intField,fieldStart,fieldEnd-fieldStart);
*destinationInt = atoi(intField.String());
}
}
and similar functions for string and maybe bool.
Then all your profile storage code becomes:
[snip]
GetProfileInt(&msgBody, "LoginTime", &userProfile.loginTime);
GetProfileBool(&msgBody, "EmailEnabled", &userProfile.emailEnabled);
GetProfileInt(&msgBody, "MemberIdHigh", &userProfile.memberIdHigh);
GetProfileInt(&msgBody, "MemberIdLow", &userProfile.memberIdLow);
GetProfileInt(&msgBody, "lang_preference", &
userProfile.langPreference);
GetProfileString(&msgBody, "preferredEmail", &
userProfile.preferredEmail);
GetProfileInt(&msgBody, "country", &userProfile.country);
GetProfileString(&msgBody, "PostalCode", &userProfile.postalCode);
GetProfileString(&msgBody, "Gender", &userProfile.gender);
GetProfileBool(&msgBody, "Kid", &userProfile.kid);
GetProfileInt(&msgBody, "Age", &userProfile.age);
...etc (got bored doing the conversion, hopefully you understand the
plan :))
[snip]
That looks much neater to me.
If you really want to use a map, I guess that's OK, as the data is
originally received from the server as string data anyway.
Simon
> Hi guys,
>
> I am doing some work on getting the user's profile information from
> the
> server(parsing it)....problem is, it's getting a bit of mess and
> somewhat
> duplicated code....not entirely so I can't find a way to do it
> nicely, maybe
> you have some ideas for me...the code looks like this:
>
> if (strstr(mime,"text/x-msmsgsprofile") !=NULL)
> {
> //profile message
> Profile userProfile;
>
> int32 loginStart = msgBody.FindFirst("LoginTime");
> if (loginStart != B_ERROR)
> {
> loginStart += 9;
> int32 loginEnd = msgBody.FindFirst("\r\n",loginStart);
> BString loginTime;
> msgBody.CopyInto(loginTime,loginStart,loginEnd-loginStart);
> userProfile.loginTime = atoi(loginTime.String());
> }
>
> int32 emailEnabledStart = msgBody.FindFirst("EmailEnabled");
> if (emailEnabledStart != B_ERROR)
> {
> emailEnabledStart += 12;
> int32 emailEnabledEnd = msgBody.FindFirst("\r\
> n",emailEnabledStart);
> BString emailEnabled;
>
> msgBody.CopyInto(emailEnabled,emailEnabledStart,emailEnabledEnd
> -emailEnabledStart);
> userProfile.emailEnabled = atoi(emailEnabled.String());//
> bool, check
> if this works
> }
>
> int32 memberIdHighStart = msgBody.FindFirst("MemberIdHigh");
> if (memberIdHighStart != B_ERROR)
> {
> memberIdHighStart += 12;
> int32 memberIdHighEnd = msgBody.FindFirst("\r\
> n",memberIdHighStart);
> BString memberIdHigh;
>
> msgBody.CopyInto(memberIdHigh,memberIdHighStart,memberIdHighEnd
> -memberIdHighStart);
> userProfile.memberIdHigh = atoi(memberIdHigh.String());
> }
>
> int32 memberIdLowStart = msgBody.FindFirst("MemberIdLow");
> if (memberIdLowStart != B_ERROR)
> {
> memberIdLowStart += 11;
> int32 memberIdLowEnd = msgBody.FindFirst("\r\
> n",memberIdLowStart);
> BString memberIdLow;
>
> msgBody.CopyInto(memberIdLow,memberIdLowStart,memberIdLowEnd-
> memberIdLowStart);
> userProfile.memberIdLow = atoi(memberIdLow.String());
> }
>
> int32 lang_preferenceStart =
> msgBody.FindFirst("lang_preference");
> if (lang_preferenceStart != B_ERROR)
> {
> lang_preferenceStart += 15;
> int32 lang_preferenceEnd =
> msgBody.FindFirst("\r\n",lang_preferenceStart);
> BString lang_preference;
>
>
> msgBody.CopyInto(lang_preference,lang_preferenceStart,lang_preferenceEn
d-lang_preferenceStart);
> userProfile.langPreference =
> atoi(lang_preference.String());
> }
>
> int32 preferredEmailStart =
> msgBody.FindFirst("preferredEmail");
> if (preferredEmailStart != B_ERROR)
> {
> preferredEmailStart += 14;
> int32 preferredEmailEnd =
> msgBody.FindFirst("\r\n",preferredEmailStart);
>
>
> msgBody.CopyInto(userProfile.preferredEmail,preferredEmailStart,preferr
edEmailEnd-preferredEmailStart);
> }
>
> int32 countryStart = msgBody.FindFirst("country");
> if (countryStart != B_ERROR)
> {
> countryStart += 7;
> int32 countryEnd = msgBody.FindFirst("\r\n",countryStart);
> BString country;
> msgBody.CopyInto(country,countryStart,countryEnd-
> countryStart);
> userProfile.country = atoi(country.String());
> }
>
> int32 postalCodeStart = msgBody.FindFirst("PostalCode");
> if (postalCodeStart != B_ERROR)
> {
> postalCodeStart += 10;
> int32 postalCodeEnd = msgBody.FindFirst("\r\
> n",postalCodeStart);
>
>
> msgBody.CopyInto(userProfile.postalCode,postalCodeStart,postalCodeEnd-
postalCodeStart);
> }
>
> int32 genderStart = msgBody.FindFirst("Gender");
> if (genderStart != B_ERROR)
> {
> genderStart += 6;
> int32 genderEnd = msgBody.FindFirst("\r\n",genderStart);
>
> msgBody.CopyInto(userProfile.gender,genderStart,genderEnd-
> genderStart);
> }
>
> int32 kidStart = msgBody.FindFirst("Kid");
> if (kidStart != B_ERROR)
> {
> kidStart += 3;
> int32 kidEnd = msgBody.FindFirst("\r\n",kidStart);
> BString kid;
> msgBody.CopyInto(kid,kidStart,kidEnd-kidStart);
> userProfile.kid = atoi(kid.String()); //bool, check if
> works!
> }
>
> int32 ageStart = msgBody.FindFirst("Age");
> if (ageStart != B_ERROR)
> {
> ageStart += 3;
> int32 ageEnd = msgBody.FindFirst("\r\n",ageStart);
> BString age;
> msgBody.CopyInto(age,ageStart,ageEnd-ageStart);
> userProfile.age = atoi(age.String()); //bool, check if
> works!
> }
>
> int32 bDayPreStart = msgBody.FindFirst("BDayPre");
> if (bDayPreStart != B_ERROR)
> {
> bDayPreStart += 7;
> int32 bDayPreEnd = msgBody.FindFirst("\r\n",bDayPreStart);
>
> msgBody.CopyInto(userProfile.bDayPre,bDayPreStart,bDayPreEnd-
> bDayPreStart);
> }
>
> int32 birthdayStart = msgBody.FindFirst("Birthday");
> if (birthdayStart != B_ERROR)
> {
> birthdayStart += 8;
> int32 birthdayEnd = msgBody.FindFirst("\r\
> n",birthdayStart);
> BString birthday;
> msgBody.CopyInto(birthday,birthdayStart,birthdayEnd-
> birthdayStart);
> userProfile.birthday = atoi(birthday.String()); //bool,
> check if
> works!
> }
>
> int32 walletStart = msgBody.FindFirst("Wallet");
> if (walletStart != B_ERROR)
> {
> walletStart += 8;
> int32 walletEnd = msgBody.FindFirst("\r\n",walletStart);
> BString wallet;
> msgBody.CopyInto(wallet,walletStart,walletEnd-walletStart);
> userProfile.wallet = atoi(wallet.String()); //bool, check
> if works!
> }
>
> int32 flagsStart = msgBody.FindFirst("Flags");
> if (flagsStart != B_ERROR)
> {
> flagsStart += 5;
> int32 flagsEnd = msgBody.FindFirst("\r\n",flagsStart);
> BString flags;
> msgBody.CopyInto(flags,flagsStart,flagsEnd-flagsStart);
> userProfile.flags = atoi(flags.String()); //bool, check if
> works!
> }
>
> int32 sidStart = msgBody.FindFirst("sid");
> if (sidStart != B_ERROR)
> {
> sidStart += 3;
> int32 sidEnd = msgBody.FindFirst("\r\n",sidStart);
> BString sid;
> msgBody.CopyInto(sid,sidStart,sidEnd-sidStart);
> userProfile.sid = atoi(sid.String());
> }
>
> int32 kvStart = msgBody.FindFirst("kv");
> if (kvStart != B_ERROR)
> {
> kvStart += 2;
> int32 kvEnd = msgBody.FindFirst("\r\n",kvStart);
> BString kv;
> msgBody.CopyInto(kv,kvStart,kvEnd-kvStart);
> userProfile.kv = atoi(kv.String());
> }
>
> int32 mspAuthStart = msgBody.FindFirst("MSPAuth");
> if (mspAuthStart != B_ERROR)
> {
> mspAuthStart += 7;
> int32 mspAuthEnd = msgBody.FindFirst("\r\n",mspAuthStart);
>
> msgBody.CopyInto(userProfile.mspAuth,mspAuthStart,mspAuthEnd-
> mspAuthStart);
> }
>
> int32 clientIPStart = msgBody.FindFirst("ClientIP");
> if (clientIPStart != B_ERROR)
> {
> clientIPStart += 8;
> int32 clientIPEnd = msgBody.FindFirst("\r\
> n",clientIPStart);
>
> msgBody.CopyInto(userProfile.clientIP,clientIPStart,clientIPEnd
> -clientIPStart);
> }
>
> int32 clientPortStart = msgBody.FindFirst("ClientPort");
> if (clientPortStart != B_ERROR)
> {
> clientPortStart += 10;
> int32 clientPortEnd = msgBody.FindFirst("\r\
> n",clientPortStart);
> BString clientPort;
>
> msgBody.CopyInto(clientPort,clientPortStart,clientPortEnd-
> clientPortStart);
> userProfile.clientPort = atoi(clientPort.String());
> }
> //set the main user's profile
> Common::yo->setProfile(userProfile);
> }
>
> I thought of putting all information into a map structure...this is
> very
> flexible...but then we will get problems with different data types
> strings,
> ints, bools and dates....of course we could just store everything as
> strings
> but this maybe involves some casting of the information at the places
> they
> are needed....would that be a problem?
>
> regards,
>
> Tim
>
> _________________________________________________________________
> Protect your PC - get McAfee.com VirusScan Online
> http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963
>
>
>
> -------------------------------------------------------
> SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank
> Media
> 100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33
> Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
> http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285
> _______________________________________________
> bme-develop mailing list
> bme...@li...
> https://lists.sourceforge.net/lists/listinfo/bme-develop
|