i got a code from TortoiseShell\TortoiseSVN.cpp, especially GetStatusFromRemoteCache. and i got it it was roll with pipe features.
i'm programming using by Microsoft Visual Basic 6, not dotnet or VC++, for rapid building for user interface.
(and, i have no dotnet or visual studio 2005. so i can't compile any tsvn source. that is a additional problem. of cause, as i read from readme in tsvn soruce package, vs2005 express versions are open to public, but i can't use that some reason. sorry.)
i can use TSVNCache pipe with CallNamedPipe(), not TransactNamedPipe.
(i know about it is possible, too. i'll question about it in below.)
but i have some problem. please tell me answer about this problem. maybe, this problem is some programming-language speicified problem, not a problem of visual c++ or TortoiseSVN. but i have hope about you may have answer about it.
or, some others can help me. please help me. ;-(
i googled over 1days, include sunday, but i can't find fittable answers. ;-(
(1) using struct TSVNCacheRequest for requesting and WCHAR
the originally delcared TSVNCacheRequest is are;
and i potting it for visualbasic 6 as;
Private Type structTSVNCacheRequest
flags As Long
Path As String * 261
and deal the struct as;
tsvnRequest.Path = StrConv("c:\testwc",vbUnicode)
tsvnRequest.flags = TSVNCACHE_FLAGS_NONOTIFICATIONS Or TSVNCACHE_FLAGS_RECUSIVE_STATUS
but it wasnt does. the returned points are some meanless datas of 21 bytes from CallNamedPipe().
WCHAR is unicode stringset. and then, i suppose it can be potted to vb as deal the 'path' member to using StrConv() for convert to unicode. (strconv are some text convert to some charset). but. is it right? is it can make fittable char data?
if charset convert was not a problem, there are some another rule about describe path? (i suppose it is few possibilities.)
(2) Can i use CallNamedPipe()?
result= CallNamedPipe(szPipeName, VarPtr(tsvnRequest), Len(tsvnRequest), bArray(0), numBytes, cbRead, 50)
i used CallNamedPipe, not TransactNamedPipe with CreateFile. i thought it is a simple better tsvnshell's way. but question are still being. why don't you use CallNamedPipe? as your descriptions,
// Do the transaction in overlapped mode.
// That way, if anything happens which might block this call
// we still can get out of it. We NEVER MUST BLOCK THE SHELL!
// A blocked shell is a very bad user impression, because users
// who don't know why it's blocked might find the only solution
// to such a problem is a reboot and therefore they might loose
// valuable data.
// One particular situation where the shell could hang is when
// the cache crashes and our crashreport dialog comes up.
// Sure, it would be better to have no situations where the shell
// even can get blocked, but the timeout of 10 seconds is long enough
// so that users still recognize that something might be wrong and
// report back to us so we can investigate further.
reasons of using TransactNamedPipe are for overlappedmode, and the reasons of using overlappedmode are quickly user reflection.
if that was true, digging pipe using CallNamedPipe() has no problem, too. isn't it? frankly, i can't know about this. please mention about it.
(2) Can i retrive result value as native data blocks?
char m_owner; ///< owner of the lock
bool m_readonly; ///< whether the file is write protected or not
i'm not skilled in potting VC++ to VB. so i'll retrive native data from TSVNCache, not seperated as struct. (of cause, it would possible, maybe.) if it possible, can you tell me length of struct TSVNCacheResponse? (especially, in Windows2000 or WindowsXP)
i'm so sorry. but i can't using VS.NET or VS2005 some cruel reason. please forgive me.