// Copyright © 2015 The CefSharp Authors. All rights reserved.
|
//
|
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
|
|
using System;
|
using System.Runtime.Serialization;
|
|
namespace CefSharp.Internals
|
{
|
[DataContract]
|
public class JavascriptCallback
|
{
|
[DataMember]
|
public long Id { get; set; }
|
|
[DataMember]
|
public int BrowserId { get; set; }
|
|
[DataMember]
|
public string FrameId { get; set; }
|
|
public byte[] ToByteArray(byte primitiveType)
|
{
|
var idBytes = BitConverter.GetBytes(Id);
|
var browserIdBytes = BitConverter.GetBytes(BrowserId);
|
var frameIdBytes = System.Text.Encoding.ASCII.GetBytes(FrameId);
|
|
var bytes = new byte[1 + idBytes.Length + browserIdBytes.Length + frameIdBytes.Length];
|
|
bytes[0] = primitiveType;
|
idBytes.CopyTo(bytes, 1);
|
browserIdBytes.CopyTo(bytes, 1 + idBytes.Length);
|
frameIdBytes.CopyTo(bytes, 1 + idBytes.Length + browserIdBytes.Length);
|
|
return bytes;
|
}
|
|
public static JavascriptCallback FromBytes(byte[] bytes)
|
{
|
var primativeType = bytes[0];
|
var frameIdLength = bytes.Length - 1 - sizeof(long) - sizeof(int);
|
var id = BitConverter.ToInt64(bytes, 1);
|
var browserId = BitConverter.ToInt32(bytes, 1 + sizeof(long));
|
var frameId = System.Text.Encoding.ASCII.GetString(bytes, 1 + sizeof(long) + sizeof(int), frameIdLength);
|
|
var callback = new JavascriptCallback
|
{
|
Id = id,
|
BrowserId = browserId,
|
FrameId = frameId
|
};
|
|
return callback;
|
}
|
}
|
}
|