I understand there's no end. What I want to achieve is the following: 1. Say hello 2. Read all the persistent messages from inputstream 3. Send my insert/get requests
I mean I can handle the relevant messages from the node which is specific to my requests but I don't know how to move from step 2 to step 3. Thanks, Michael Matthew Toseland wrote: > On Thursday 27 August 2009 17:42:56 Michael Yip wrote: > >> That's enough to read and terminate reading of one message. However, how >> do I know when is the last message so I can stop reading from the stream? >> >> For example, a PersistentPut message came in..so I parse until >> EndMesssage line. However, there could be yet more PersistentPut/Get >> messages. Therefore, I'm just wondering how do I break out of the loop >> after the last of these messages. >> > > There is no end to messages! :) You can make any number of requests over a > single connection, one after another or simultaneously. > > You submit a request or insert, with a specific Identifier. Then you wait for > the terminal messages for that request or insert, which will include its > Identifier. So for a request, that would typically be GetFailed or DataFound > + AllData. For a persistent request (persistence != connection), you'll just > get the DataFound and you have to do GetRequestStatus to get the data, and > then RemoveRequest to delete the request. For a persistent insert, you're > looking for PutSuccessful or PutFailed. In all cases IdentifierCollision is > possible if there is already a request with the same Identifier, or > ProtocolError if you have a bug, a file is not readable etc. > >> Matthew Toseland wrote: >> >>> On Thursday 27 August 2009 16:50:48 Michael Yip wrote: >>> >>> >>>> Hi Matt, >>>> >>>> Problem is that (line = buffIns.readLine()) == null does not terminate >>>> the loop. Since most messages ends with EndMessage, how do I know how >>>> many more to read before I break the loop?? >>>> >>>> >>> A message ends with "EndMessage" or "Data", or something on a line with no >>> = in it. All lines within a message include an "=". The first line, the >>> message type, doesn't include an "=". That should be enough information to >>> separate and parse messages, no? >>> >>> >>>> Thanks, >>>> >>>> Michael >>>> >>>> Matthew Toseland wrote: >>>> >>>> >>>>> On Thursday 27 August 2009 13:00:41 bbackde at googlemail.com wrote: >>>>> >>>>> >>>>> >>>>>> You should process the messages in a Thread. Put your code into a Thread >>>>>> that calls handler methods when a specific message arrived. >>>>>> The Thread runs forever and receives all messages and all data... >>>>>> >>>>>> >>>>>> >>>>> All you need to do is parse each message. The type of the message is the >>>>> first line, it ends at the last line, unless it has trailing data. You >>>>> can do this level of parsing without understanding the message. Then you >>>>> can ignore it if you don't understand it, or you can handle it >>>>> appropriately. >>>>> >>>>> >>>>> >>>>>> On Thu, Aug 27, 2009 at 03:22, Michael Yip<mhy831 at cs.bham.ac.uk> >>>>>> wrote: >>>>>> >>>>>> >>>>>> >>>>>>> Hi guys, >>>>>>> >>>>>>> Does anyone know how to know when I've read all the PersistentPut and >>>>>>> PersistentGet messages at the start? There's no way of knowing how many >>>>>>> there are and I have no idea how to know when to stop reading? Below is >>>>>>> the code I've written: >>>>>>> >>>>>>> String line; >>>>>>> while((line = buffIns.readLine()) != null){ >>>>>>> System.out.println(line); >>>>>>> _Logger.log(line); >>>>>>> //Capture ConnectionIdentifer to be used as salt for file >>>>>>> insertions >>>>>>> if(line.contains("ConnectionIdentifier")){ >>>>>>> helloID = line.substring(line.indexOf('=') + 1, >>>>>>> line.length()); >>>>>>> } >>>>>>> if(line.equals("EndMessage")){ >>>>>>> //Read an extra line to see if there are more to read >>>>>>> //Read all persistent puts and gets >>>>>>> line = buffIns.readLine(); >>>>>>> if(line.contains("Get") || line.contains("Put") || >>>>>>> line.contains("URI") ||line.contains("Get") || line.contains("Data") >>>>>>> ||line.contains("Started") || line.contains("Finished")|| >>>>>>> line.contains("Simple")){ >>>>>>> System.out.println(line); >>>>>>> _Logger.log(line); >>>>>>> }else{ >>>>>>> return true; >>>>>>> } >>>>>>> } >>>>>>> } >>>>>>> >>>>>>> but obviously the reader doesn't know when to stop and so line is never >>>>>>> null? >>>>>>> >>>>>>> Thanks, >>>>>>> >>>>>>> Michael >>>>>>> >>>>>>> ------------------------------------------------------------------------ >>>>>>> >>>>>>> _______________________________________________ >>>>>>> Devl mailing list >>>>>>> Devl at freenetproject.org >>>>>>> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl