コード例 #1
0
 /// <summary>
 /// The serialize event.
 /// </summary>
 /// <param name="eventData">The event data.</param>
 /// <returns> The serialized event</returns>
 public byte[] SerializeEventData(EventData eventData)
 {
     using (ReusableMemoryStream stream = new ReusableMemoryStream())
     {
         BigEndianBinaryWriter binaryWriter = new BigEndianBinaryWriter(stream);
         stream.Position = this.headerSize;
         stream.WriteByte(eventData.Code);
         if ((eventData.Parameters == null) || (eventData.Parameters.Count == 0))
         {
             binaryWriter.WriteInt16(0);
         }
         else
         {
             binaryWriter.WriteInt16((short)eventData.Parameters.Count);
             Amf3Writer writer2 = new Amf3Writer(binaryWriter);
             foreach (KeyValuePair <byte, object> pair in eventData.Parameters)
             {
                 writer2.WriteInteger((long)((ulong)pair.Key));
                 writer2.Write(pair.Value);
             }
         }
         stream.Position = 0L;
         this.headerWriter.WriteHeader(stream, RtsMessageType.Event, false);
         return(stream.ToArray());
     }
 }
コード例 #2
0
 /// <summary>
 ///  The serialize event.
 /// </summary>
 /// <param name="eventData">The event data.</param>
 /// <returns>The serialized event.</returns>
 /// <exception cref="T:System.IO.InvalidDataException">
 ///A value can not be serialized.
 ///</exception>
 ///<exception cref="T:System.ArrayTypeMismatchException">
 /// A collection with different types can not be serialized.
 ///</exception>
 public byte[] SerializeEventData(EventData eventData)
 {
     using (ReusableMemoryStream stream = new ReusableMemoryStream())
     {
         stream.WriteByte(0xf3);
         stream.WriteByte(4);
         SerializeEventData(stream, eventData);
         return(stream.ToArray());
     }
 }
コード例 #3
0
 /// <summary>
 /// Serializes an <see cref="T:Photon.SocketServer.OperationResponse"/>.
 /// </summary>
 /// <param name="operationResponse">The operation response to serialize.</param>
 /// <param name="messageType">
 ///  The message type.
 /// Should be eiter <see
 /// cref="F:Photon.SocketServer.Rpc.Protocols.RtsMessageType.OperationResponse"/> or <see
 /// cref="F:Photon.SocketServer.Rpc.Protocols.RtsMessageType.InternalOperationResponse"/>.
 /// </param>
 /// <returns>A serialized operation response.</returns>
 private byte[] SerializeOperationResponse(OperationResponse operationResponse, RtsMessageType messageType)
 {
     using (ReusableMemoryStream stream = new ReusableMemoryStream())
     {
         stream.WriteByte(0xf3);
         stream.WriteByte((byte)messageType);
         SerializeOperationResponse(stream, operationResponse);
         return(stream.ToArray());
     }
 }
コード例 #4
0
 /// <summary>
 /// Serializes an operation request.
 /// </summary>
 /// <param name="operationRequest">The operation request.</param>
 /// <returns>a serialized operation request message</returns>
 public byte[] SerializeOperationRequest(OperationRequest operationRequest)
 {
     using (ReusableMemoryStream stream = new ReusableMemoryStream())
     {
         stream.WriteByte(0xf3);
         stream.WriteByte(2);
         SerializeOperationRequest(stream, operationRequest);
         return(stream.ToArray());
     }
 }
コード例 #5
0
 /// <summary>
 /// The serialize event.
 /// </summary>
 /// <param name="eventData"> The event data.</param>
 /// <returns>The serialized event.</returns>
 /// <exception cref="T:System.IO.InvalidDataException">
 /// A value can not be serialized.
 ///</exception>
 ///<exception cref="T:System.ArrayTypeMismatchException">
 /// A collection with different types can not be serialized.
 ///</exception>
 public byte[] SerializeEventData(EventData eventData)
 {
     using (ReusableMemoryStream stream = new ReusableMemoryStream())
     {
         this.SerializeEventData(stream, eventData);
         stream.Position = 0L;
         this.headerWriter.WriteHeader(stream, RtsMessageType.Event, false);
         return(stream.ToArray());
     }
 }
コード例 #6
0
 public byte[] SerializeOperationRequest(OperationRequest operationRequest)
 {
     using (ReusableMemoryStream stream = new ReusableMemoryStream())
     {
         stream.Position = this.headerSize;
         SerializeOperationRequest(stream, operationRequest);
         stream.Position = 0L;
         this.headerWriter.WriteHeader(stream, RtsMessageType.Operation, false);
         return(stream.ToArray());
     }
 }
コード例 #7
0
 private byte[] SerializeOperationResponse(OperationResponse operationResponse, RtsMessageType messageType)
 {
     using (ReusableMemoryStream stream = new ReusableMemoryStream())
     {
         stream.Position = this.headerSize;
         SerializeOperationResponse(stream, operationResponse);
         stream.Position = 0L;
         this.headerWriter.WriteHeader(stream, messageType, false);
         return(stream.ToArray());
     }
 }
コード例 #8
0
ファイル: Protocol.cs プロジェクト: sy545633799/NetworkCore
 /// <summary>
 ///  The serialize init response.
 /// </summary>
 /// <param name="headerWriter">The header writer.</param>
 /// <returns> the init response</returns>
 internal static byte[] SerializeInitResponse(IRtsMessageHeaderConverter headerWriter)
 {
     using (ReusableMemoryStream stream = new ReusableMemoryStream())
     {
         stream.Position = headerWriter.HeaderSize;
         RtsInitResponseMessage.Serialize(stream);
         stream.Position = 0L;
         headerWriter.WriteHeader(stream, RtsMessageType.InitResponse, false);
         return(stream.ToArray());
     }
 }
コード例 #9
0
ファイル: Protocol.cs プロジェクト: sy545633799/NetworkCore
 /// <summary>
 /// The serialize init request.
 /// </summary>
 /// <param name="headerWriter">The header Writer.</param>
 /// <param name="protocolVersion">The protocol version</param>
 /// <param name="clientVersion">The client version.</param>
 /// <param name="applicationId">The application id.</param>
 /// <returns>the serialized init request</returns>
 internal static byte[] SerializeInitRequest(IRtsMessageHeaderConverter headerWriter, Version protocolVersion, Version clientVersion, string applicationId)
 {
     using (ReusableMemoryStream stream = new ReusableMemoryStream())
     {
         stream.Position = headerWriter.HeaderSize;
         new RtsInitMessage(new byte[] { (byte)protocolVersion.Major, (byte)protocolVersion.Minor }, new byte[] { (byte)clientVersion.Major, (byte)clientVersion.Minor, (byte)clientVersion.Build }, applicationId).Serialize(stream);
         stream.Position = 0L;
         headerWriter.WriteHeader(stream, RtsMessageType.Init, false);
         return(stream.ToArray());
     }
 }
コード例 #10
0
        public async Task TestNoAckFlow()
        {
            const string data = "The cuiqk brwon fox jumps over the zaly god.";

            var        server        = new FakeServer(SimulationMode.Success);
            var        connection    = new Connection(server.EndPoint, Connection.DefaultSocketFactory, BPool, RPool, 16, 16);
            const int  correlationId = 379821;
            const byte ack           = 1;
            var        buffer        = new ReusableMemoryStream(null);

            BigEndianConverter.Write(buffer, 4 + 4 + 1 + data.Length - 4);
            BigEndianConverter.Write(buffer, correlationId);
            buffer.WriteByte(ack);
            var s = Encoding.UTF8.GetBytes(data);

            buffer.Write(s, 0, s.Length);

            var bdata = buffer.ToArray();

            var p = new TaskCompletionSource <Response>();

            connection.Response +=
                (con, cor, b) => p.SetResult(new Response {
                Connection = con, CorrelationId = cor, Data = b
            });

            await connection.ConnectAsync();

            buffer.Position = 8;
            buffer.WriteByte(0);
            await connection.SendAsync(correlationId, buffer, false);

            buffer = new ReusableMemoryStream(null);
            buffer.Write(bdata, 0, bdata.Length);
            buffer.Position = 8;
            buffer.WriteByte(1);
            await connection.SendAsync(correlationId, buffer, true);

            var r = await p.Task;

            server.Stop();

            Assert.AreSame(connection, r.Connection);
            Assert.AreEqual(correlationId, r.CorrelationId);
            Assert.AreEqual(data, Encoding.UTF8.GetString(r.Data.ToArray()));
        }
コード例 #11
0
 /// <summary>
 /// Serializes an <see cref="T:Photon.SocketServer.OperationResponse"/>.
 /// The operation response data will be encrypted using the specified <see cref="T:Photon.SocketServer.Security.ICryptoProvider"/>.
 /// </summary>
 /// <param name="operationResponse"> The response.</param>
 /// <param name="cryptoProvider">An <see cref="T:Photon.SocketServer.Security.ICryptoProvider"/> instance used to encrypt the operation response.</param>
 /// <returns>The serialized operation response.</returns>
 public byte[] SerializeOperationResponseEncrypted(OperationResponse operationResponse, ICryptoProvider cryptoProvider)
 {
     byte[] buffer;
     using (ReusableMemoryStream stream = new ReusableMemoryStream())
     {
         SerializeOperationResponse(stream, operationResponse);
         byte[] data = stream.ToArray();
         buffer = cryptoProvider.Encrypt(data);
     }
     using (ReusableMemoryStream stream2 = new ReusableMemoryStream())
     {
         stream2.Position = this.headerSize;
         stream2.Write(buffer, 0, buffer.Length);
         stream2.Position = 0L;
         this.headerWriter.WriteHeader(stream2, RtsMessageType.OperationResponse, true);
         return(stream2.ToArray());
     }
 }
コード例 #12
0
 /// <summary>
 /// Serializes an <see cref="T:Photon.SocketServer.OperationRequest"/>.
 /// </summary>
 /// <param name="operationRequest">The operation request.</param>
 /// <returns>The serialized operation request.</returns>
 public byte[] SerializeOperationRequest(OperationRequest operationRequest)
 {
     using (ReusableMemoryStream stream = new ReusableMemoryStream())
     {
         IBinaryWriter binaryWriter = new BigEndianBinaryWriter(stream);
         stream.Position = this.headerSize;
         binaryWriter.WriteByte(operationRequest.OperationCode);
         binaryWriter.WriteInt16((short)operationRequest.Parameters.Count);
         Amf3Writer writer2 = new Amf3Writer(binaryWriter);
         foreach (KeyValuePair <byte, object> pair in operationRequest.Parameters)
         {
             writer2.WriteInteger((long)((ulong)pair.Key));
             writer2.Write(pair.Value);
         }
         stream.Position = 0L;
         this.headerWriter.WriteHeader(stream, RtsMessageType.Operation, false);
         return(stream.ToArray());
     }
 }
コード例 #13
0
 /// <summary>
 /// Encrypts an event.
 /// </summary>
 /// <param name="eventData"> The event data.</param>
 /// <param name="cryptoProvider">The crypto provider.</param>
 /// <returns>the encrypted event.</returns>
 /// <exception cref="T:System.ArgumentNullException">
 /// cryptoProvider is null.
 /// </exception>
 public byte[] SerializeEventDataEncrypted(IEventData eventData, ICryptoProvider cryptoProvider)
 {
     byte[] buffer;
     if (cryptoProvider == null)
     {
         throw new ArgumentNullException("cryptoProvider");
     }
     using (ReusableMemoryStream stream = new ReusableMemoryStream())
     {
         SerializeEventData(stream, eventData);
         byte[] data = stream.ToArray();
         buffer = cryptoProvider.Encrypt(data, 0, data.Length);
     }
     using (ReusableMemoryStream stream2 = new ReusableMemoryStream())
     {
         stream2.WriteByte(0xf3);
         stream2.WriteByte(0x84);
         stream2.Write(buffer, 0, buffer.Length);
         return(stream2.ToArray());
     }
 }
コード例 #14
0
 /// <summary>
 /// Serializes an <see cref="T:Photon.SocketServer.OperationResponse"/>.
 /// The operation response data will be encrypted using the specified <see cref="T:Photon.SocketServer.Security.ICryptoProvider"/>.
 /// </summary>
 /// <param name="operationResponse"> The response.</param>
 /// <param name="cryptoProvider">An <see cref="T:Photon.SocketServer.Security.ICryptoProvider"/> instance used to encrypt the operation response.</param>
 /// <returns>The serialized operation response.</returns>
 public byte[] SerializeOperationResponseEncrypted(OperationResponse operationResponse, ICryptoProvider cryptoProvider)
 {
     byte[] buffer;
     if (cryptoProvider == null)
     {
         throw new ArgumentNullException("cryptoProvider");
     }
     using (ReusableMemoryStream stream = new ReusableMemoryStream())
     {
         SerializeOperationResponse(stream, operationResponse);
         byte[] data = stream.ToArray();
         buffer = cryptoProvider.Encrypt(data);
     }
     using (ReusableMemoryStream stream2 = new ReusableMemoryStream())
     {
         stream2.WriteByte(0xf3);
         stream2.WriteByte(0x83);
         stream2.Write(buffer, 0, buffer.Length);
         return(stream2.ToArray());
     }
 }
コード例 #15
0
 public byte[] SerializeEventDataEncrypted(IEventData eventData, ICryptoProvider cryptoProvider)
 {
     byte[] buffer;
     if (cryptoProvider == null)
     {
         throw new ArgumentNullException("cryptoProvider");
     }
     using (ReusableMemoryStream stream = new ReusableMemoryStream())
     {
         SerializeEventData(stream, eventData);
         byte[] data = stream.ToArray();
         buffer = cryptoProvider.Encrypt(data, 0, data.Length);
     }
     using (ReusableMemoryStream stream2 = new ReusableMemoryStream())
     {
         stream2.Position = this.headerSize;
         stream2.Write(buffer, 0, buffer.Length);
         stream2.Position = 0L;
         this.headerWriter.WriteHeader(stream2, RtsMessageType.Event, true);
         return(stream2.ToArray());
     }
 }
コード例 #16
0
 /// <summary>
 /// Serializes an <see cref="T:Photon.SocketServer.OperationResponse"/>.
 /// </summary>
 /// <param name="operationResponse">The operation response to serialize.</param>
 /// <returns>The serialized operation response.</returns>
 public byte[] SerializeOperationResponse(OperationResponse operationResponse)
 {
     using (ReusableMemoryStream stream = new ReusableMemoryStream())
     {
         BigEndianBinaryWriter binaryWriter = new BigEndianBinaryWriter(stream);
         stream.Position = this.headerSize;
         binaryWriter.WriteByte(operationResponse.OperationCode);
         binaryWriter.WriteInt16(operationResponse.ReturnCode);
         if (string.IsNullOrEmpty(operationResponse.DebugMessage))
         {
             binaryWriter.WriteByte(0x2a);
         }
         else
         {
             binaryWriter.WriteByte(0x73);
             binaryWriter.WriteUTF(operationResponse.DebugMessage);
         }
         if ((operationResponse.Parameters == null) || (operationResponse.Parameters.Count == 0))
         {
             binaryWriter.WriteInt16(0);
         }
         else
         {
             binaryWriter.WriteInt16((short)operationResponse.Parameters.Count);
             Amf3Writer writer2 = new Amf3Writer(binaryWriter);
             foreach (KeyValuePair <byte, object> pair in operationResponse.Parameters)
             {
                 writer2.WriteInteger((long)((ulong)pair.Key));
                 writer2.Write(pair.Value);
             }
         }
         stream.Position = 0L;
         this.headerWriter.WriteHeader(stream, RtsMessageType.OperationResponse, false);
         return(stream.ToArray());
     }
 }