Пример #1
0
 public virtual void OnData(ByteBuffer buffer)
 {
     while (buffer.HasRemaining())
     {
         var complete = message.ReadFrom(buffer);
         if (!complete)
         {
             return;
         }
         //MESSAGE IS COMPLETE HERE
         if (message.IsFlagSet(ClientMessage.BeginAndEndFlags))
         {
             //HANDLE-MESSAGE
             HandleMessage(message);
             message = ClientMessage.Create();
             continue;
         }
         if (message.IsFlagSet(ClientMessage.BeginFlag))
         {
             // first fragment
             var builder = new BufferBuilder();
             builderBySessionIdMap.Add(message.GetCorrelationId(), builder);
             builder.Append(message.Buffer(), 0, message.GetFrameLength());
         }
         else
         {
             var builder = builderBySessionIdMap[message.GetCorrelationId()];
             if (builder.Position() == 0)
             {
                 throw new InvalidOperationException();
             }
             builder.Append(message.Buffer(), message.GetDataOffset(),
                            message.GetFrameLength() - message.GetDataOffset());
             if (message.IsFlagSet(ClientMessage.EndFlag))
             {
                 var msgLength = builder.Position();
                 var cm        = ClientMessage.CreateForDecode(builder.Buffer(), 0);
                 cm.SetFrameLength(msgLength);
                 //HANDLE-MESSAGE
                 HandleMessage(cm);
                 builderBySessionIdMap.Remove(message.GetCorrelationId());
             }
         }
         message = ClientMessage.Create();
     }
 }