code: def my_protocol_parser(out, buf):
      
      while True:
          tp = yield from buf.read(5)
          if tp in (MSG_PING, MSG_PONG):
              # skip line
              yield from buf.skipuntil(b'\r\n')
              out.feed_data(Message(tp, None))
          elif tp == MSG_STOP:
              out.feed_data(Message(tp, None))
          elif tp == MSG_TEXT:
              # read text
              text = yield from buf.readuntil(b'\r\n')
              out.feed_data(Message(tp, text.strip().decode('utf-8')))
          else:
              raise ValueError('Unknown protocol prefix.')
docs: Parser is used with StreamParser for incremental protocol parsing.
      Parser is a generator function, but it is not a coroutine. Usually
      parsers are implemented as a state machine.
  
      more details in asyncio/parsers.py
      existing parsers:
        * HTTP protocol parsers asyncio/http/protocol.py
        * websocket parser asyncio/http/websocket.py