//-------------------------------------------------- //Serializer ProtoBufMsg and send 2014-1-14 zxbx public void OnProtoBufDataWrite(ProtoBuf.IExtensible message) { int iHeaderLen = 0; MemoryStream stream = new MemoryStream(); ProtoBufPackageHeader header = new ProtoBufPackageHeader(); iHeaderLen = header.ReturnHeaderLen(); byte[] headbuffer = new byte[iHeaderLen]; stream.Write(headbuffer, 0, iHeaderLen); int messagename_length = this.protoBufserializer.Serialize(message, stream); header.MessageLength = (int)stream.Length; //effective data len header.MessageType = (byte)6; header.MessageTypeLength = messagename_length; //ByteArray byteArray = new ByteArray(stream.GetBuffer()); byte[] byteT = new byte[header.MessageLength]; ByteArray byteArray = new ByteArray(byteT); ByteArray byteTcp = new ByteArray(stream.GetBuffer()); Buffer.BlockCopy(byteTcp.Bytes, 0, byteArray.Bytes, 0, header.MessageLength); //UnityEngine.Debug.Log("Message Buffer with empty header-->" + DefaultObjectDumpFormatter.HexDump(byteArray)); this.bitSwarm.ThreadManager.EnqueueSend(new WriteProtoBufBinaryDataDelegate(this.WriteProtoBufBinaryData), header, byteArray); }
//--------------------------------------------- private void WriteProtoBufBinaryData(ProtoBufPackageHeader header, ByteArray binData) { ByteArray byteArray = new ByteArray(); byteArray.WriteBytes(binData.Bytes); header.WriteTo(byteArray.Bytes, 0); this.WriteTCP(byteArray); }
private void ProcessOutProtoBufItem(Hashtable item) { object obj = item["callback"]; WriteProtoBufBinaryDataDelegate writeBinaryDataDelegate = obj as WriteProtoBufBinaryDataDelegate; if (writeBinaryDataDelegate != null) { ByteArray binData = item["data"] as ByteArray; ProtoBufPackageHeader header = item["header"] as ProtoBufPackageHeader; writeBinaryDataDelegate(header, binData); } }
//---------------------------------------------- //Test data packet only header zxb 2014-1-20 public void OnProtoBufDataWriteOnlyHeaderTest(ProtoBuf.IExtensible message) { int iHeaderLen = 0; MemoryStream stream = new MemoryStream(); ProtoBufPackageHeader header = new ProtoBufPackageHeader(); iHeaderLen = header.ReturnHeaderLen(); byte[] headbuffer = new byte[iHeaderLen]; stream.Write(headbuffer, 0, iHeaderLen); header.MessageLength = 47; header.MessageType = (byte)6; header.MessageTypeLength = 24; ByteArray byteArray = new ByteArray(stream.GetBuffer()); this.bitSwarm.ThreadManager.EnqueueSend(new WriteProtoBufBinaryDataDelegate(this.WriteProtoBufBinaryData), header, byteArray); }
public void EnqueueSend(WriteProtoBufBinaryDataDelegate callback, ProtoBufPackageHeader header, ByteArray data) { Hashtable hashtable = new Hashtable(); hashtable["callback"] = callback; hashtable["header"] = header; hashtable["data"] = data; object obj = this.outQueueLocker; Monitor.Enter(obj); try { this.outThreadQueue.Enqueue(hashtable); this.outHasQueuedItems = true; } finally { Monitor.Exit(obj); } }