csharp/aiportal/tscamera/bfbd.Common/UltraRecord/Core/SessionInfo.cs

SessionInfo.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Diagnostics;

namespace bfbd.UltraRecord.Core
{
	[Serializable]
	public clast SessionInfo
	{
		public string SessionId;
		public DateTime CreateTime = DateTime.Now;
		public string UserName;
		public string Domain;
		public string ClientName;
		public string ClientAddress;

		[NonSerialized]
		public DateTime LastActiveTime = DateTime.Now;
		[NonSerialized]
		public bool IsEnd = false;
		[NonSerialized]
		public int SnapshotCount;
		[NonSerialized]
		public long DataLength;

		public byte[] ToBinary()
		{
			Debug.astert(Domain.Length < byte.MaxValue && UserName.Length < byte.MaxValue && ClientName.Length < byte.MaxValue && ClientAddress.Length < byte.MaxValue);
			using (MemoryStream ms = new MemoryStream())
			using (BinaryWriter bw = new BinaryWriter(ms, Encoding.UTF8))
			{
				bw.Write(new byte[] { 1, 2, 6, 0 });
				bw.Write(new Guid(SessionId).ToByteArray());		// 16 bytes.
				bw.Write(CreateTime.ToBinary());					// 8 bytes.
				bw.Write(Domain);
				bw.Write(UserName);
				bw.Write(ClientName);
				bw.Write(ClientAddress);

				bw.Flush();
				return ms.ToArray();
			}
		}

		public static SessionInfo FromBinary(byte[] bs)
		{
			using (MemoryStream ms = new MemoryStream(bs))
			using (BinaryReader br = new BinaryReader(ms, Encoding.UTF8))
			{
				byte[] version = br.ReadBytes(4);

				SessionInfo si = new SessionInfo();
				si.SessionId = new Guid(br.ReadBytes(16)).ToString("n");
				si.CreateTime = DateTime.FromBinary(br.ReadInt64());	// 8 bytes.
				si.Domain = br.ReadString();
				si.UserName = br.ReadString();
				si.ClientName = br.ReadString();
				si.ClientAddress = br.ReadString();
				return si;
			}
		}
	}
}