public void TestBasicBuffering() { DummySession sess = new DummySession(); sess.FilterChain.AddFirst("peer", new DummyFilter()); sess.FilterChain.AddFirst("logger", new LoggingFilter()); BufferedWriteFilter bFilter = new BufferedWriteFilter(10); sess.FilterChain.AddLast("buffer", bFilter); IoBuffer data = IoBuffer.Allocate(1); for (byte i = 0; i < 20; i++) { data.Put((byte)(0x30 + i)); data.Flip(); sess.Write(data); data.Clear(); } // Add one more byte to overflow the final buffer data.Put((byte)0); data.Flip(); sess.Write(data); // Flush the final byte bFilter.Flush(sess); sess.Close(true); }
public void SendMsg() { //lock (this) { while (m_sendMsgs.Count > 0) { MessageBody msg = m_sendMsgs.Dequeue(); if (msg != null) { m_sendBuffer.Clear(); Array.Clear(m_sendData, 0, m_sendData.Length); int len = CPacket.HEADER_TYPE_BYTES + msg.data.Length; m_sendBuffer.PutInt32(len); m_sendBuffer.PutInt16((short)msg.type); m_sendBuffer.Put(msg.data); m_sendBuffer.Flip(); m_sendBuffer.Get(m_sendData, 0, len + CPacket.HEADER_LENGTH_BYTES); m_currentSendBufferWritePosition = len + CPacket.HEADER_LENGTH_BYTES; SendMsg(m_sendData); } } } }
public void Send(Cmd4Send cmd) { ClientSendBuffer.Clear(); ClientSendBuffer.PutShort(MSG_HEAD); byte[] content = cmd.Encode(); int len = content.Length + 2;//+2是cmd的short长度 ClientSendBuffer.PutInt(len); ClientSendBuffer.PutShort(cmd.Cmd); ClientSendBuffer.PutBytes(content); byte[] bs = ClientSendBuffer.ToArray(); //Debug.Log("发送长度:"+bs.Length); //IoBuffer ib = new IoBuffer(102400); //ib.PutBytes(bs); //short head = ib.GetShort(); //int len0 = ib.GetInt(); //int cmd0 = ib.GetShort(); //int contentI = ib.GetInt(); //string contentS = ib.GetString(); //Debug.Log("head:"+head+" len0:"+len0+" cmd0:"+cmd0+" contentI:"+contentI+" contentS:"+contentS); Send(bs); }
public void GetMsg(object o) { while (m_isSocketReady) { int recieveLen = 0; try { if (m_mySocket.Available > 0) { recieveLen = m_mySocket.Client.Receive(m_getData, 0, (int)m_mySocket.ReceiveBufferSize, SocketFlags.None); } else { System.Threading.Thread.Sleep(1); break; } } catch (Exception e) { DEBUG.Error(e.Message); break; } m_readBuffer.Put(m_getData, 0, recieveLen); Array.Clear(m_getData, 0, m_getData.Length); m_readBuffer.Flip(); int len = GetPacketLength(m_readBuffer); if (len < 0) { break; } MessageBody msg = new MessageBody(); msg.size = (uint)CPacket.PopPacketLength(m_readBuffer); msg.type = (ushort)CPacket.PopPacketType(m_readBuffer); byte[] data = new byte[len - CPacket.HEADER_TYPE_BYTES]; m_readBuffer.Get(data, 0, len - CPacket.HEADER_TYPE_BYTES); msg.data = data; m_recievedMsgs.Add(msg); bool isFinish = false; if (m_readBuffer.HasRemaining) { m_readBuffer.Compact(); } else { m_readBuffer.Clear(); isFinish = true; } if (isFinish) { break; } } }
public byte[] Encode() { //head,len,cmd,content,这里只使用EncodeContent存具体内容,head,len,cmd都不在这里处理 SendBuffer.Clear(); //SendBuffer.PutShort(Cmd); EncodeContent(SendBuffer); return(SendBuffer.ToArray()); }
public static void LoadDataTable(string tablePath) { byte[] bs = FileHelper.ReadBytesFromFile(tablePath); buffer.PutBytes(bs); string tableName = buffer.GetString(); StaticDataTable dataTable = new StaticDataTable(tableName); if (TableDic.ContainsKey(tableName)) { Debug.LogError("TableMgr.LoadDataTable table:" + tableName + "已存在,导入失败"); return; } dataTable.Column = buffer.GetInt(); dataTable.Row = buffer.GetInt(); Debug.LogError("TableMgr.LoadDataTable tableName:" + tableName + " row:" + dataTable.Row + " colomn:" + dataTable.Column); dataTable.TableDataArray = new string[dataTable.Row, dataTable.Column]; for (int i = 0; i < dataTable.Row; i++) { for (int j = 0; j < dataTable.Column; j++) { string fieldContent = buffer.GetString(); dataTable.TableDataArray[i, j] = fieldContent; Debug.Log("TableMgr.LoadDataTable i:" + i + " j:" + j + " fieldContent:" + fieldContent); } } for (int i = 0; i < dataTable.Column; i++) { //Debug.LogError("nani-->i:"+i+" "+ dataTable.TableDataArray[0, i]); dataTable.FieldNameDic.Add(dataTable.TableDataArray[0, i], i); } for (int i = 0; i < dataTable.Row; i++) { dataTable.IDDic.Add(dataTable.TableDataArray[i, 0], i); } TableDic.Add(tableName, dataTable); buffer.Clear(); }
/// <summary> /// 导出所有当前打开tree的config /// </summary> public static void ExportTreeConfig() { //获取所有根Folder TreeFolder[] treeFolder = GEditorRoot.GetIns().GetAllTreeRootFolder(); ioBuffer4TreeCfgExport = new IoBuffer(); for (int i = 0; i < treeFolder.Length; i++) { ProcessOneTreeItem(treeFolder[i]); FileHelper.Save(GEditorEnum.EDITOR_DATA_ROOTURL, GEditorEnum.EDITOR_TREE_CONFIG_NAME + treeFolder[i].Name + ".config", ioBuffer4TreeCfgExport.ToArray()); ioBuffer4TreeCfgExport.Clear(); } ioBuffer4TreeCfgExport = null; }
private void InternalFlush(INextFilter nextFilter, IoSession session, IoBuffer buf) { IoBuffer tmp = null; lock (buf) { buf.Flip(); tmp = buf.Duplicate(); buf.Clear(); } if (log.IsDebugEnabled) { log.Debug("Flushing buffer: " + tmp); } nextFilter.FilterWrite(session, new DefaultWriteRequest(tmp)); }
public void Append(IoBuffer input) { if (_overflowPosition != 0) { Discard(input); } else if (_buf.Position > _textLineDecoder.MaxLineLength - input.Remaining) { _overflowPosition = _buf.Position; _buf.Clear(); Discard(input); } else { _buf.Put(input); } }
public void Send(string sessionID, Cmd4Send cmd) { Debug.Log("服务端向sessionID:" + sessionID + " 发送 cmd:" + cmd.Cmd); if (SessionDic.ContainsKey(sessionID)) { ServerSendBuffer.Clear(); ServerSendBuffer.PutShort(MSG_HEAD); byte[] content = cmd.Encode(); int len = content.Length + 2;//+2是cmd的short长度 ServerSendBuffer.PutInt(len); ServerSendBuffer.PutShort(cmd.Cmd); ServerSendBuffer.PutBytes(content); byte[] bs = ServerSendBuffer.ToArray(); AsyncSend(SessionDic[sessionID]._SocketPackMgr._Socket, bs); } }
/// <summary> /// 接受dialog返回数据 /// </summary> /// <param name="bs">Bs.</param> private void OnDialogReturnValue(byte[] bs) { IoBuffer _ib = new IoBuffer(); _ib.PutBytes(bs); string _key = _ib.GetString(); //从输入框返回要修改的key值 string _value = _ib.GetString(); //从输入框返回的要修改的value值 string _type = _ib.GetString(); //从输入框返回的修改类型值,比如字符串类型,或者列表类型 string _TreeItemIDStr = TreeItemID.ToString(); //Log.i("KVListItem", "OnDialogReturnValue", "=======>iNDEX:" + Index, BeShowLog); _MyKVContainer.ModifyKVItem(_TreeItemIDStr, Index, _key, _value, _type); _ib.Clear(); _ib = null; }
public void Write(IoBuffer buf) { if (_closed) { return; } lock (_syncRoot) { if (_buf.HasRemaining) { _buf.Compact().Put(buf).Flip(); } else { _buf.Clear().Put(buf).Flip(); Monitor.PulseAll(_syncRoot); } } }
public void Post(short cmd, byte[] bytes, Action <byte[]> callback) { _Buffer.Clear(); _Buffer.PutBytes(bytes); //NINFO 这个为了帮助server去掉client httpRequest头 int msgContentLen = _Buffer.GetLength(); _Buffer.PutInt(msgContentLen); byte[] bs = _Buffer.ToArray(); //Debug.Log("客户端发送len :" + bs.Length+" msgContentLen:"+msgContentLen); //for (int i = 0; i < bs.Length; i++) //{ // Debug.LogError("client send: i:" + i + "--->" + bs[i]); //} StartCoroutine(Post(bs, callback, false)); }
/// <summary> /// Writes the given buffer. /// </summary> public void Write(IoBuffer buf) { if (CanRead) { if (_closed) { return; } lock (_syncRoot) { if (_buf.HasRemaining) { _buf.Compact().Put(buf).Flip(); } else { _buf.Clear().Put(buf).Flip(); Monitor.PulseAll(_syncRoot); } } } else if (CanWrite) { if (!_session.Connected) { throw new IOException("The session has been closed."); } _lastWriteFuture = _session.Write(buf); } else { throw new NotSupportedException(); } }
private void DecodeNormal(Context ctx, IoSession session, IoBuffer input, IProtocolDecoderOutput output) { Int32 matchCount = ctx.MatchCount; // Try to find a match Int32 oldPos = input.Position, oldLimit = input.Limit; while (input.HasRemaining) { Byte b = input.Get(); if (_delimBuf[matchCount] == b) { matchCount++; if (matchCount == _delimBuf.Length) { // Found a match. Int32 pos = input.Position; input.Limit = pos; input.Position = oldPos; ctx.Append(input); input.Limit = oldLimit; input.Position = pos; if (ctx.OverflowPosition == 0) { IoBuffer buf = ctx.Buffer; buf.Flip(); buf.Limit -= matchCount; ArraySegment <Byte> bytes = buf.GetRemaining(); try { String str = _encoding.GetString(bytes.Array, bytes.Offset, bytes.Count); WriteText(session, str, output); } finally { buf.Clear(); } } else { Int32 overflowPosition = ctx.OverflowPosition; ctx.Reset(); throw new RecoverableProtocolDecoderException("Line is too long: " + overflowPosition); } oldPos = pos; matchCount = 0; } } else { input.Position = Math.Max(0, input.Position - matchCount); matchCount = 0; } } // Put remainder to buf. input.Position = oldPos; ctx.Append(input); ctx.MatchCount = matchCount; }
private void DecodeAuto(Context ctx, IoSession session, IoBuffer input, IProtocolDecoderOutput output) { Int32 matchCount = ctx.MatchCount; // Try to find a match Int32 oldPos = input.Position, oldLimit = input.Limit; while (input.HasRemaining) { Byte b = input.Get(); Boolean matched = false; switch (b) { case 0x0d: // \r // Might be Mac, but we don't auto-detect Mac EOL // to avoid confusion. matchCount++; break; case 0x0a: // \n // UNIX matchCount++; matched = true; break; default: matchCount = 0; break; } if (matched) { // Found a match. Int32 pos = input.Position; input.Limit = pos; input.Position = oldPos; ctx.Append(input); input.Limit = oldLimit; input.Position = pos; if (ctx.OverflowPosition == 0) { IoBuffer buf = ctx.Buffer; buf.Flip(); buf.Limit -= matchCount; ArraySegment <Byte> bytes = buf.GetRemaining(); try { String str = _encoding.GetString(bytes.Array, bytes.Offset, bytes.Count); WriteText(session, str, output); } finally { buf.Clear(); } } else { Int32 overflowPosition = ctx.OverflowPosition; ctx.Reset(); throw new RecoverableProtocolDecoderException("Line is too long: " + overflowPosition); } oldPos = pos; matchCount = 0; } } // Put remainder to buf. input.Position = oldPos; ctx.Append(input); ctx.MatchCount = matchCount; }
/// <summary> /// 版本信息表 /// </summary> // static void CreateVerTable(){ // // //[创建版本信息表]----apkVer.bytes--------------------------------------------------------- // buf.Clear(); // buf = new IoBuffer(); // buf.PutInt(1);//apkVer版本号 // buf.PutBool(true);//是否有apkRes // buf.PutBool(false);//是否有apkUpdate // buf.PutBool(false);//是否有apkDynamic // //buf.PutBool(false);//是否有 // b = buf.ToArray(); // FileHelper.WriteBytes2File(EditorHelper.OUTPUT_TABLE_SYSTEM_PATH+"/apkver.bytes",b); // // } /// <summary> /// 包内资源表 /// </summary> // static void CreateAPKResTable(){ // // //配表资源scnInfo0.bytes // int id_scnInfo =0; // id_scnInfo = ResEnum.GetResIDByTypeAndID(id_scnInfo,ResEnum.RES_TYPE0_BYTES,ResEnum.RES_TYPE1_SCENE,ResEnum.RES_TYPE2_NULL,0);//暂定无类型id为0 // Debug.Log("id_scnInfo:"+id_scnInfo); // // // //配表资源mapInfo0.bytes // int id_mapInfo =0; // id_mapInfo = ResEnum.GetResIDByTypeAndID(id_mapInfo,ResEnum.RES_TYPE0_BYTES,ResEnum.RES_TYPE1_MAP,ResEnum.RES_TYPE2_MAP_INFO,0);//暂定无类型id为0 // Debug.Log("id_mapInfo:"+id_mapInfo); // // //测试terrain0.n // int id_terrain=0; // id_terrain = ResEnum.GetResIDByTypeAndID(id_terrain,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_MAP,ResEnum.RES_TYPE2_MAP_TERRAIN,0);//暂定无类型id为0 // // //骨骼 // int id_bone = 0; // id_bone = ResEnum.GetResIDByTypeAndID(id_bone,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_BONE,0);//暂定无类型id为0 // // int id_eye = 0; // id_eye = ResEnum.GetResIDByTypeAndID(id_eye,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_EYES,0);//暂定无类型id为0 // // int id_face = 0; // id_face = ResEnum.GetResIDByTypeAndID(id_face,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_FACE,0);//暂定无类型id为0 // // int id_head = 0; // id_head = ResEnum.GetResIDByTypeAndID(id_head,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_HEAD,0);//暂定无类型id为0 // // int id_top = 0; // id_top = ResEnum.GetResIDByTypeAndID(id_top,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_TOP,0);//暂定无类型id为0 // // int id_hands = 0; // id_hands = ResEnum.GetResIDByTypeAndID(id_hands,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_HANDS,0);//暂定无类型id为0 // // int id_pants = 0; // id_pants = ResEnum.GetResIDByTypeAndID(id_pants,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_PANTS,0);//暂定无类型id为0 // // int id_shoes = 0; // id_shoes = ResEnum.GetResIDByTypeAndID(id_shoes,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_SHOES,0);//暂定无类型id为0 // // //材质资源 // int id_eye_mat = 0; // id_eye_mat = ResEnum.GetResIDByTypeAndID(id_eye_mat,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_EYES_MAT,0);//暂定无类型id为0 // // int id_face_mat = 0; // id_face_mat = ResEnum.GetResIDByTypeAndID(id_face_mat,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_FACE_MAT,0);//暂定无类型id为0 // // int id_head_mat = 0; // id_head_mat = ResEnum.GetResIDByTypeAndID(id_head_mat,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_HEAD_MAT,0);//暂定无类型id为0 // // int id_top_mat = 0; // id_top_mat = ResEnum.GetResIDByTypeAndID(id_top_mat,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_TOP_MAT,0);//暂定无类型id为0 // // int id_hands_mat = 0; // id_hands_mat = ResEnum.GetResIDByTypeAndID(id_hands_mat,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_HANDS_MAT,0);//暂定无类型id为0 // // int id_pants_mat = 0; // id_pants_mat = ResEnum.GetResIDByTypeAndID(id_pants_mat,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_PANTS_MAT,0);//暂定无类型id为0 // // int id_shoes_mat = 0; // id_shoes_mat = ResEnum.GetResIDByTypeAndID(id_shoes_mat,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_SHOES_MAT,0);//暂定无类型id为0 // // int id_anim_group = 0; // id_anim_group = ResEnum.GetResIDByTypeAndID(id_anim_group,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_ANIMGROUP,0);//暂定无类型id为0 // // Debug.Log("bone:"+id_bone + // "eyes:"+id_eye+ // "face:"+id_face+ // "head:"+id_head+ // "top:"+id_top+ // "hand:"+id_hands+ // "pants:"+id_pants+ // "shoes:"+id_shoes+ // "eyesM:"+id_eye_mat+ // "faceM:"+id_face_mat+ // "headM:"+id_head_mat+ // "topM:"+id_top_mat+ // "handM:"+id_hands_mat+ // "pantsM:"+id_pants_mat+ // "shoeM:"+id_shoes_mat+ // "anim_group"+id_anim_group); // // // //创建包内资源表apkRes.bytes(apk中包含的res)--------------------------------------------------------- // buf.Clear(); // buf.PutInt(19);//apkRes中的资源数 // //加入scnid配表资源 // //buf.PutInt(id_scnID);//apkRes中存的资源ID // buf.PutInt(id_scnInfo);//加入scnInfo配表资源 // buf.PutInt(id_mapInfo);//加入mapInfo配表资源 // buf.PutInt(id_terrain);//加入terrain资源 // // buf.PutInt(id_bone); // buf.PutInt(id_eye); // buf.PutInt(id_face); // buf.PutInt(id_head); // buf.PutInt(id_top); // buf.PutInt(id_hands); // buf.PutInt(id_pants); // buf.PutInt(id_shoes); // // buf.PutInt(id_eye_mat); // buf.PutInt(id_face_mat); // buf.PutInt(id_head_mat); // buf.PutInt(id_top_mat); // buf.PutInt(id_hands_mat); // buf.PutInt(id_pants_mat); // buf.PutInt(id_shoes_mat); // // buf.PutInt(id_anim_group); // // b = buf.ToArray(); // FileHelper.WriteBytes2File(EditorHelper.OUTPUT_TABLE_SYSTEM_PATH+"/apkres.bytes",b); // // } /// <summary> /// 资源总表 /// </summary> static void CreateResInfoTable() { // //配表资源scnInfo0.bytes // int id_scnInfo =0; // id_scnInfo = ResEnum.GetResIDByTypeAndID(id_scnInfo,ResEnum.RES_TYPE0_BYTES,ResEnum.RES_TYPE1_SCENE,ResEnum.RES_TYPE2_NULL,0);//暂定无类型id为0 // Debug.Log("id_scnInfo:"+id_scnInfo); // // // //配表资源mapInfo0.bytes // int id_mapInfo =0; // id_mapInfo = ResEnum.GetResIDByTypeAndID(id_mapInfo,ResEnum.RES_TYPE0_BYTES,ResEnum.RES_TYPE1_MAP,ResEnum.RES_TYPE2_MAP_INFO,0);//暂定无类型id为0 // Debug.Log("id_mapInfo:"+id_mapInfo); // // //测试terrain0.n // int id_terrain=0; // id_terrain = ResEnum.GetResIDByTypeAndID(id_terrain,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_MAP,ResEnum.RES_TYPE2_MAP_TERRAIN,0);//暂定无类型id为0 // // // //骨骼 // int id_bone = 0; // id_bone = ResEnum.GetResIDByTypeAndID(id_bone,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_BONE,0);//暂定无类型id为0 // // int id_eye = 0; // id_eye = ResEnum.GetResIDByTypeAndID(id_eye,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_EYES,0);//暂定无类型id为0 // // int id_face = 0; // id_face = ResEnum.GetResIDByTypeAndID(id_face,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_FACE,0);//暂定无类型id为0 // // int id_head = 0; // id_head = ResEnum.GetResIDByTypeAndID(id_head,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_HEAD,0);//暂定无类型id为0 // // int id_top = 0; // id_top = ResEnum.GetResIDByTypeAndID(id_top,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_TOP,0);//暂定无类型id为0 // // int id_hands = 0; // id_hands = ResEnum.GetResIDByTypeAndID(id_hands,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_HANDS,0);//暂定无类型id为0 // // int id_pants = 0; // id_pants = ResEnum.GetResIDByTypeAndID(id_pants,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_PANTS,0);//暂定无类型id为0 // // int id_shoes = 0; // id_shoes = ResEnum.GetResIDByTypeAndID(id_shoes,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_SHOES,0);//暂定无类型id为0 // // //材质资源 // int id_eye_mat = 0; // id_eye_mat = ResEnum.GetResIDByTypeAndID(id_eye_mat,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_EYES_MAT,0);//暂定无类型id为0 // // int id_face_mat = 0; // id_face_mat = ResEnum.GetResIDByTypeAndID(id_face_mat,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_FACE_MAT,0);//暂定无类型id为0 // // int id_head_mat = 0; // id_head_mat = ResEnum.GetResIDByTypeAndID(id_head_mat,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_HEAD_MAT,0);//暂定无类型id为0 // // int id_top_mat = 0; // id_top_mat = ResEnum.GetResIDByTypeAndID(id_top_mat,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_TOP_MAT,0);//暂定无类型id为0 // // int id_hands_mat = 0; // id_hands_mat = ResEnum.GetResIDByTypeAndID(id_hands_mat,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_HANDS_MAT,0);//暂定无类型id为0 // // int id_pants_mat = 0; // id_pants_mat = ResEnum.GetResIDByTypeAndID(id_pants_mat,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_PANTS_MAT,0);//暂定无类型id为0 // // int id_shoes_mat = 0; // id_shoes_mat = ResEnum.GetResIDByTypeAndID(id_shoes_mat,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_SHOES_MAT,0);//暂定无类型id为0 // // // int id_anim_group = 0; // id_anim_group = ResEnum.GetResIDByTypeAndID(id_anim_group,ResEnum.RES_TYPE0_PREFAB,ResEnum.RES_TYPE1_ROLE,ResEnum.RES_TYPE2_ROLE_ANIMGROUP,0);//暂定无类型id为0 // //[创建资源总表]---apkresinfo.bytes------------------------------------------------------------------ buf.Clear(); buf.PutInt(19); //资源条数 //加入scnid配表资源 //buf.PutInt(id_scnID);//资源ID //buf.PutByte((byte)0);//卸载类型 //buf.PutString("scnid");//资源名 //buf.PutInt(0);//依赖资源数 //加入scnInfo配表资源 buf.PutString("table/scene/scninfo0.bytes"); //资源ID buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)0); //打包类型,单独打包 //TODO bytes资源是否是单独打包没什么区别,这个参数对于bytes类型是多余的,bytes和bundle加载走的不同逻辑,加或不加都不会出错 buf.PutString("scninfo0"); //资源名 buf.PutInt(0); //依赖资源数 //TODO 需要考虑下还要不要这个依赖资源数 //加入mapInfo配表资源 buf.PutString("table/map/mapinfo0.bytes"); //资源ID buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)0); //打包类型,单独打包 buf.PutString("mapinfo0"); //资源名 buf.PutInt(0); //依赖资源数 //加入terrain资源 buf.PutString("res/map/terrain0.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)0); //打包类型,单独打包 buf.PutString("terrain0"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/female_basebone.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)0); //打包类型,单独打包 buf.PutString("female_basebone"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/female_eyes.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)1); //打包类型,多资源打包 buf.PutString("female_eyes"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/female_face-1.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)1); //打包类型,多资源打包 buf.PutString("female_face-1"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/female_hair-1.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)1); //打包类型,多资源打包 buf.PutString("female_hair-1"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/female_top-1.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)1); //打包类型,多资源打包 buf.PutString("female_top-1"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/female_hands-1.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)1); //打包类型,多资源打包 buf.PutString("female_hands-1"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/female_pants-1.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)1); //打包类型,多资源打包 buf.PutString("female_pants-1"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/female_shoes-1.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)1); //打包类型,多资源打包 buf.PutString("female_shoes-1"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/female_eyes_blue.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)0); //打包类型,单独打包 buf.PutString("female_eyes_blue"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/female_face-colorA.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)0); //打包类型,单独打包 buf.PutString("female_face-colorA"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/female_hair-1_brown.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)0); //打包类型,单独打包 buf.PutString("female_hair-1_brown"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/female_top-1_blue.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)0); //打包类型,单独打包 buf.PutString("female_top-1_blue"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/female_hands_blue.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)0); //打包类型,单独打包 buf.PutString("female_hands_blue"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/female_pants-1_blue.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)0); //打包类型,单独打包 buf.PutString("female_pants-1_blue"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/female_shoes-1_blue.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)0); //打包类型,单独打包 buf.PutString("female_shoes-1_blue"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/female_anim_common.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)1); //打包类型,多资源打包 buf.PutString("female_anim_common"); //资源名 buf.PutInt(0); //依赖资源数 b = buf.ToArray(); FileHelper.WriteBytes2File(EditorHelper.OUTPUT_TABLE_SYSTEM_PATH + "/apkresinfo.bytes", b); }
public static void I(string msg, string tag = LogDefault.TAG_NAME_DEFALUT, LogColorEnum color = LogColorEnum.green) { if (!LogConfig.BeShowLog) { return; } LogStruct logStruct = new LogStruct(); logStruct.Msg = msg; logStruct.Tag = tag; logStruct.Time = LogUtils.GetCurTime(); logStruct.LogColor = color; logStruct.Type = LogType.Log; LogUtils.SB.Clear(); var stack = new System.Diagnostics.StackTrace(true); var frames = stack.GetFrames(); int length = frames.Length; for (int i = 0; i < length; i++) { string fileName = frames[i].GetFileName(); fileName = System.IO.Path.GetFileName(fileName); var method = frames[i].GetMethod(); Type classType = method.ReflectedType; string _nameSpace = classType.Namespace; string className = classType.Name; string methodName = method.Name; int lineNum = frames[i].GetFileLineNumber(); LogUtils.SB.Append(_nameSpace); LogUtils.SB.Append("."); LogUtils.SB.Append(className); LogUtils.SB.Append(":"); LogUtils.SB.Append(methodName); LogUtils.SB.Append("()"); LogUtils.SB.Append(" ( at "); LogUtils.SB.Append(fileName); LogUtils.SB.Append(":"); LogUtils.SB.Append(lineNum); LogUtils.SB.Append("\n"); } logStruct.StackTrace = LogUtils.SB.ToString(); LogDataMgr.AddLog(logStruct); //NINFO 之所以screen console分开处理,因为MsgRec不能接收到tag,color等信息 //这也是难点,所以要么输出到screen,要么到控制台,两者同时存在也没意义 if (LogConfig.BeWrite2Screen) { Ins.RefreshCurLogList(); if (LogConfig.BeWirte2Remote) { Buffer.Clear(); Buffer.PutString(GetStringLog(logStruct)); //Buffer.PutString("我"); byte[] bs = Buffer.ToArray(); //for (int i = 0; i < bs.Length; i++) //{ // Debug.Log("客户端发送i:"+i+"--->"+bs[i]); //} LogHttpClient.GetIns().Post((short)125, bs, null); } if (LogConfig.BeWrite2File) { byte[] bs = Buffer.ToArray(); FileHelper.WriteBytes2File_Append(LogConfig.LogFileSavePath, bs); } } else { Debug.Log(GetStringLog(logStruct)); } }
public void TestOverflow() { Encoding encoding = Encoding.UTF8; TextLineDecoder decoder = new TextLineDecoder(encoding, LineDelimiter.Auto); decoder.MaxLineLength = 3; ProtocolCodecSession session = new ProtocolCodecSession(); IProtocolDecoderOutput output = session.DecoderOutput; IoBuffer input = IoBuffer.Allocate(16); // Make sure the overflow exception is not thrown until // the delimiter is encountered. input.PutString("A", encoding).Flip().Mark(); decoder.Decode(session, input.Reset().Mark(), output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); decoder.Decode(session, input.Reset().Mark(), output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); decoder.Decode(session, input.Reset().Mark(), output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); decoder.Decode(session, input.Reset().Mark(), output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); input.Clear().PutString("A\r\nB\r\n", encoding).Flip(); try { decoder.Decode(session, input, output); Assert.Fail(); } catch (RecoverableProtocolDecoderException) { // signifies a successful test execution Assert.IsTrue(true); } decoder.Decode(session, input, output); Assert.AreEqual(1, session.DecoderOutputQueue.Count); Assert.AreEqual("B", session.DecoderOutputQueue.Dequeue()); //// Make sure OOM is not thrown. GC.Collect(); //long oldFreeMemory = GC.GetTotalMemory(false); input = IoBuffer.Allocate(1048576 * 16).Sweep((byte)' ').Mark(); for (int i = 0; i < 10; i++) { input.Reset(); input.Mark(); decoder.Decode(session, input, output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); // Memory consumption should be minimal. //Assert.IsTrue(GC.GetTotalMemory(false) - oldFreeMemory < 1048576); } input.Clear().PutString("C\r\nD\r\n", encoding).Flip(); try { decoder.Decode(session, input, output); Assert.Fail(); } catch (RecoverableProtocolDecoderException) { // signifies a successful test execution Assert.IsTrue(true); } decoder.Decode(session, input, output); Assert.AreEqual(1, session.DecoderOutputQueue.Count); Assert.AreEqual("D", session.DecoderOutputQueue.Dequeue()); // Memory consumption should be minimal. //Assert.IsTrue(GC.GetTotalMemory(false) - oldFreeMemory < 1048576); }
public void TestNormalDecode() { Encoding encoding = Encoding.UTF8; TextLineDecoder decoder = new TextLineDecoder(encoding, LineDelimiter.Windows); ProtocolCodecSession session = new ProtocolCodecSession(); IProtocolDecoderOutput output = session.DecoderOutput; IoBuffer input = IoBuffer.Allocate(16); // Test one decode and one output.put input.PutString("ABC\r\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(1, session.DecoderOutputQueue.Count); Assert.AreEqual("ABC", session.DecoderOutputQueue.Dequeue()); // Test two decode and one output.put input.Clear(); input.PutString("DEF", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); input.Clear(); input.PutString("GHI\r\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(1, session.DecoderOutputQueue.Count); Assert.AreEqual("DEFGHI", session.DecoderOutputQueue.Dequeue()); // Test one decode and two output.put input.Clear(); input.PutString("JKL\r\nMNO\r\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(2, session.DecoderOutputQueue.Count); Assert.AreEqual("JKL", session.DecoderOutputQueue.Dequeue()); Assert.AreEqual("MNO", session.DecoderOutputQueue.Dequeue()); // Test aborted delimiter (DIRMINA-506) input.Clear(); input.PutString("ABC\r\r\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(1, session.DecoderOutputQueue.Count); Assert.AreEqual("ABC\r", session.DecoderOutputQueue.Dequeue()); // Test splitted long delimiter decoder = new TextLineDecoder(encoding, new LineDelimiter("\n\n\n")); input.Clear(); input.PutString("PQR\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); input.Clear(); input.PutString("\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); input.Clear(); input.PutString("\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(1, session.DecoderOutputQueue.Count); Assert.AreEqual("PQR", session.DecoderOutputQueue.Dequeue()); // Test splitted long delimiter which produces two output.put decoder = new TextLineDecoder(encoding, new LineDelimiter("\n\n\n")); input.Clear(); input.PutString("PQR\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); input.Clear(); input.PutString("\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); input.Clear(); input.PutString("\nSTU\n\n\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(2, session.DecoderOutputQueue.Count); Assert.AreEqual("PQR", session.DecoderOutputQueue.Dequeue()); Assert.AreEqual("STU", session.DecoderOutputQueue.Dequeue()); // Test splitted long delimiter mixed with partial non-delimiter. decoder = new TextLineDecoder(encoding, new LineDelimiter("\n\n\n")); input.Clear(); input.PutString("PQR\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); input.Clear(); input.PutString("X\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); input.Clear(); input.PutString("\n\nSTU\n\n\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(2, session.DecoderOutputQueue.Count); Assert.AreEqual("PQR\nX", session.DecoderOutputQueue.Dequeue()); Assert.AreEqual("STU", session.DecoderOutputQueue.Dequeue()); }
public void TestAutoDecode() { Encoding encoding = Encoding.UTF8; TextLineDecoder decoder = new TextLineDecoder(encoding, LineDelimiter.Auto); ProtocolCodecSession session = new ProtocolCodecSession(); IProtocolDecoderOutput output = session.DecoderOutput; IoBuffer input = IoBuffer.Allocate(16); // Test one decode and one output input.PutString("ABC\r\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(1, session.DecoderOutputQueue.Count); Assert.AreEqual("ABC", session.DecoderOutputQueue.Dequeue()); // Test two decode and one output input.Clear(); input.PutString("DEF", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); input.Clear(); input.PutString("GHI\r\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(1, session.DecoderOutputQueue.Count); Assert.AreEqual("DEFGHI", session.DecoderOutputQueue.Dequeue()); // Test one decode and two output input.Clear(); input.PutString("JKL\r\nMNO\r\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(2, session.DecoderOutputQueue.Count); Assert.AreEqual("JKL", session.DecoderOutputQueue.Dequeue()); Assert.AreEqual("MNO", session.DecoderOutputQueue.Dequeue()); // Test multiple '\n's input.Clear(); input.PutString("\n\n\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(3, session.DecoderOutputQueue.Count); Assert.AreEqual("", session.DecoderOutputQueue.Dequeue()); Assert.AreEqual("", session.DecoderOutputQueue.Dequeue()); Assert.AreEqual("", session.DecoderOutputQueue.Dequeue()); // Test splitted long delimiter (\r\r\n) input.Clear(); input.PutString("PQR\r", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); input.Clear(); input.PutString("\r", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); input.Clear(); input.PutString("\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(1, session.DecoderOutputQueue.Count); Assert.AreEqual("PQR", session.DecoderOutputQueue.Dequeue()); // Test splitted long delimiter (\r\r\n) which produces two output input.Clear(); input.PutString("PQR\r", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); input.Clear(); input.PutString("\r", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); input.Clear(); input.PutString("\nSTU\r\r\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(2, session.DecoderOutputQueue.Count); Assert.AreEqual("PQR", session.DecoderOutputQueue.Dequeue()); Assert.AreEqual("STU", session.DecoderOutputQueue.Dequeue()); // Test splitted long delimiter mixed with partial non-delimiter. input.Clear(); input.PutString("PQR\r", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); input.Clear(); input.PutString("X\r", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(0, session.DecoderOutputQueue.Count); input.Clear(); input.PutString("\r\nSTU\r\r\n", encoding); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(2, session.DecoderOutputQueue.Count); Assert.AreEqual("PQR\rX", session.DecoderOutputQueue.Dequeue()); Assert.AreEqual("STU", session.DecoderOutputQueue.Dequeue()); input.Clear(); String s = encoding.GetString(new byte[] { 0, 77, 105, 110, 97 }); input.PutString(s, encoding); input.Put(0x0a); input.Flip(); decoder.Decode(session, input, output); Assert.AreEqual(1, session.DecoderOutputQueue.Count); Assert.AreEqual(s, session.DecoderOutputQueue.Dequeue()); }
/// <summary> /// 资源总表 /// </summary> static void CreateResInfoTable() { //[创建资源总表]---apkresinfo.bytes------------------------------------------------------------------ buf.Clear(); buf.PutInt(14); //资源条数 //加入scnid配表资源 //buf.PutInt(id_scnID);//资源ID //buf.PutByte((byte)0);//卸载类型 //buf.PutString("scnid");//资源名 //buf.PutInt(0);//依赖资源数 //加入scnInfo配表资源 buf.PutString("table/scene/scninfo0.bytes"); //资源ID buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)0); //打包类型,单独打包 //TODO bytes资源是否是单独打包没什么区别,这个参数对于bytes类型是多余的,bytes和bundle加载走的不同逻辑,加或不加都不会出错 buf.PutString("scninfo0"); //资源名 buf.PutInt(0); //依赖资源数 //TODO 需要考虑下还要不要这个依赖资源数 //加入mapInfo配表资源 buf.PutString("table/map/mapinfo0.bytes"); //资源ID buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)0); //打包类型,单独打包 buf.PutString("mapinfo0"); //资源名 buf.PutInt(0); //依赖资源数 //加入terrain资源 buf.PutString("res/map/terrain0.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)0); //打包类型,单独打包 buf.PutString("terrain0"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/hx_basebone.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)0); //打包类型,单独打包 buf.PutString("hx_basebone"); //资源名 buf.PutInt(0); //依赖资源数 // buf.PutString("res/role/female_eyes.n"); // buf.PutByte((byte)0);//卸载类型 // buf.PutByte((byte)1);//打包类型,多资源打包 // buf.PutString("female_eyes");//资源名 // buf.PutInt(0);//依赖资源数 buf.PutString("res/role/hx_face.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)1); //打包类型,多资源打包 buf.PutString("hx_face-1"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/hx_head.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)1); //打包类型,多资源打包 buf.PutString("hx_head"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/hx_top.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)1); //打包类型,多资源打包 buf.PutString("hx_top"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/hx_hand.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)1); //打包类型,多资源打包 buf.PutString("hx_hand"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/hx_down.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)1); //打包类型,多资源打包 buf.PutString("hx_down"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/hx_shoes.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)1); //打包类型,多资源打包 buf.PutString("hx_shoes"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/hanxin.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)0); //打包类型,单独打包 buf.PutString("hanxin"); //资源名 buf.PutInt(0); //依赖资源数 // buf.PutString("res/role/female_face-colorA.n"); // buf.PutByte((byte)0);//卸载类型 // buf.PutByte((byte)0);//打包类型,单独打包 // buf.PutString("female_face-colorA");//资源名 // buf.PutInt(0);//依赖资源数 // // buf.PutString("res/role/female_hair-1_brown.n"); // buf.PutByte((byte)0);//卸载类型 // buf.PutByte((byte)0);//打包类型,单独打包 // buf.PutString("female_hair-1_brown");//资源名 // buf.PutInt(0);//依赖资源数 // // buf.PutString("res/role/female_top-1_blue.n"); // buf.PutByte((byte)0);//卸载类型 // buf.PutByte((byte)0);//打包类型,单独打包 // buf.PutString("female_top-1_blue");//资源名 // buf.PutInt(0);//依赖资源数 // // buf.PutString("res/role/female_hands_blue.n"); // buf.PutByte((byte)0);//卸载类型 // buf.PutByte((byte)0);//打包类型,单独打包 // buf.PutString("female_hands_blue");//资源名 // buf.PutInt(0);//依赖资源数 // // buf.PutString("res/role/female_pants-1_blue.n"); // buf.PutByte((byte)0);//卸载类型 // buf.PutByte((byte)0);//打包类型,单独打包 // buf.PutString("female_pants-1_blue");//资源名 // buf.PutInt(0);//依赖资源数 // // buf.PutString("res/role/female_shoes-1_blue.n"); // buf.PutByte((byte)0);//卸载类型 // buf.PutByte((byte)0);//打包类型,单独打包 // buf.PutString("female_shoes-1_blue");//资源名 // buf.PutInt(0);//依赖资源数 // buf.PutString("res/role/hx_anim_common.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)1); //打包类型,多资源打包 buf.PutString("hx_anim_common"); //资源名 buf.PutInt(0); //依赖资源数 buf.PutString("res/role/hx_anim_sk1.n"); buf.PutByte((byte)0); //卸载类型 buf.PutByte((byte)1); //打包类型,多资源打包 buf.PutString("hx_anim_sk1"); //资源名 buf.PutInt(0); //依赖资源数 b = buf.ToArray(); FileHelper.WriteBytes2File(EditorHelper.OUTPUT_TABLE_SYSTEM_PATH + "/apkresinfo.bytes", b); }
/// <summary> /// 导出场景 /// </summary> /// <param name="id">Identifier.</param> void ExportScene(int id) { Debug.Log(string.Format("step1--->开始导出场景{0}信息", id)); byte sceneId = Convert.ToByte(sceneIdStr); int mapWidth = Convert.ToInt32(mapWidthStr); int mapHeight = Convert.ToInt32(mapHeightStr); string path = Path.GetDirectoryName(Application.dataPath) + "/data/bin/"; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } IoBuffer buffer = new IoBuffer(); buffer.PutByte(sceneId); buffer.PutString(sceneNameStr); buffer.PutInt(mapWidth); buffer.PutInt(mapHeight); //Debug.Log("导出时buffer长度:"+buffer.ToArray().Length); string filename = path + "scn" + id; FileHelper.WriteBytes2File(filename, buffer.ToArray()); buffer.Clear(); buffer = null; Debug.Log(string.Format("导出场景{0}信息成功", filename)); //保存场景中go到prefab string saveScenePrefabPath = Application.dataPath + "/Resources/Prefabs/Scenes/scn" + sceneId + "/"; Debug.Log("step2--->开始将场景中的prefab导入到" + saveScenePrefabPath); //找到所有场景中Go,并保存当前场景的prefab foreach (GameObject obj in UnityEngine.Object.FindObjectsOfType(typeof(GameObject))) { switch (obj.name) { case "terrain": case "scene": case "dlight": case "obj": case "partical": case "ani": case "tree": string prefabPath = saveScenePrefabPath + obj.name + ".prefab"; if (File.Exists(prefabPath)) { Debug.Log(string.Format(prefabPath + "存在,删除重建")); File.Delete(prefabPath); } PrefabUtility.CreatePrefab(prefabPath, obj); break; default: Debug.LogError("ExportScene()存在场景以外其他物体:" + obj.name); break; } } Debug.Log(string.Format("保存场景{0}prefab成功", filename)); //Debug.Log("step2--->开始将Resourse中的prefab导出成Assetbundle"); //1 导出路径 }