public ProtobufPackageInfo Filter(BufferList data, out int rest)
        {
            rest = 0;
            var buffStream = new BufferStream();

            buffStream.Initialize(data);

            var stream   = CodedInputStream.CreateInstance(buffStream);
            var varint32 = (int)stream.ReadRawVarint32();

            if (varint32 <= 0)
            {
                return(default(ProtobufPackageInfo));
            }

            var total      = data.Total;
            var packageLen = varint32 + (int)stream.Position;

            if (total >= packageLen)
            {
                rest = total - packageLen;
                var body        = stream.ReadRawBytes(varint32);
                var message     = DefeatMessage.ParseFrom(body);
                var requestInfo = new ProtobufPackageInfo(message.Type, message);
                return(requestInfo);
            }

            return(default(ProtobufPackageInfo));
        }
Exemplo n.º 2
0
        private static void AppServerOnNewRequestReceived(ProtobufAppSession session, ProtobufRequestInfo requestInfo)
        {
            switch (requestInfo.Type)
            {
            case DefeatMessage.Types.Type.BackMessage:
                Console.WriteLine("BackMessage:{0}", requestInfo.Body.BackMessage.Content);
                break;

            case DefeatMessage.Types.Type.CallMessage:
                Console.WriteLine("CallMessage:{0}", requestInfo.Body.CallMessage.Content);

                var backMessage = BackMessage.CreateBuilder()
                                  .SetContent("Hello I am form C# server by SuperSocket").Build();
                var message = DefeatMessage.CreateBuilder()
                              .SetType(DefeatMessage.Types.Type.BackMessage)
                              .SetBackMessage(backMessage).Build();

                using (var stream = new MemoryStream())
                {
                    CodedOutputStream os = CodedOutputStream.CreateInstance(stream);

                    os.WriteMessageNoTag(message);

                    os.Flush();

                    byte[] data = stream.ToArray();
                    session.Send(new ArraySegment <byte>(data));
                }


                break;
            }
        }
        public ProtobufRequestInfo Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int rest)
        {
            rest = 0;
            var readOffset = offset - m_OffsetDelta;

            CodedInputStream stream = CodedInputStream.CreateInstance(readBuffer, readOffset, length);
            var varint32            = (int)stream.ReadRawVarint32();

            if (varint32 <= 0)
            {
                return(null);
            }

            var headLen = (int)stream.Position - readOffset;

            rest = length - varint32 - headLen + m_ParsedLength;

            if (rest >= 0)
            {
                byte[]        body        = stream.ReadRawBytes(varint32);
                DefeatMessage message     = DefeatMessage.ParseFrom(body);
                var           requestInfo = new ProtobufRequestInfo(message.Type, message);
                InternalReset();
                return(requestInfo);
            }
            else
            {
                m_ParsedLength += length;
                m_OffsetDelta   = m_ParsedLength;
                rest            = 0;

                var expectedOffset = offset + length;
                var newOffset      = m_OrigOffset + m_OffsetDelta;

                if (newOffset < expectedOffset)
                {
                    Buffer.BlockCopy(readBuffer, offset - m_ParsedLength + length, readBuffer, m_OrigOffset, m_ParsedLength);
                }

                return(null);
            }
        }
        public static void Main(string[] args)
        {
            EasyClient client = new EasyClient();

            client.Initialize(new ProtobufReceiveFilter(), (info =>
            {
                switch (info.Type)
                {
                case DefeatMessage.Types.Type.BackMessage:
                    Console.WriteLine("BackMessage:{0}", info.Body.BackMessage.Content);
                    break;

                case DefeatMessage.Types.Type.CallMessage:
                    Console.WriteLine("CallMessage:{0}", info.Body.CallMessage.Content);
                    break;
                }
            }));
            var flag = client.ConnectAsync(new DnsEndPoint("127.0.0.1", 2012));

            if (flag.Result)
            {
                var callMessage = CallMessage.CreateBuilder()
                                  .SetContent("Hello I am form C# client by SuperSocket ClientEngine").Build();
                var message = DefeatMessage.CreateBuilder()
                              .SetType(DefeatMessage.Types.Type.CallMessage)
                              .SetCallMessage(callMessage).Build();

                using (var stream = new MemoryStream())
                {
                    CodedOutputStream os = CodedOutputStream.CreateInstance(stream);

                    os.WriteMessageNoTag(message);

                    os.Flush();

                    byte[] data = stream.ToArray();
                    client.Send(new ArraySegment <byte>(data));
                }
            }
            Console.ReadKey();
        }
Exemplo n.º 5
0
        public void Send(string message, ConsoleColor color)
        {
            var flag = _socketClient.ConnectAsync(new DnsEndPoint("127.0.0.1", 2012));

            if (flag.Result)
            {
                var consoleColor = ConsoleColor.DarkRed.ToString();
                var callMessage  = CallMessage.CreateBuilder()
                                   .SetContent(string.Format("{0}%{1}", message, consoleColor)).Build();
                var msg = DefeatMessage.CreateBuilder()
                          .SetType(DefeatMessage.Types.Type.CallMessage)
                          .SetCallMessage(callMessage).Build();

                using (var stream = new MemoryStream())
                {
                    var os = CodedOutputStream.CreateInstance(stream);
                    os.WriteMessageNoTag(msg);
                    os.Flush();
                    var data = stream.ToArray();
                    _socketClient.Send(new ArraySegment <byte>(data));
                }
            }
        }
Exemplo n.º 6
0
 public ProtobufRequestInfo(DefeatMessage.Types.Type type, DefeatMessage body)
 {
     Type = type;
     Key  = type.ToString();
     Body = body;
 }