public UInt32 Send_UpdateRoomInfoResult(BattleRoomInfo[] room_info, UInt32 room_info_len)
        {
            UInt64 destID = mln.ProcessUnitManager.INVALID_PUUID;            // PUUID
            UInt64 srcID  = mln.ProcessUnitManager.INVALID_PUUID;            // PUUID
            UInt64 conid  = 0;

            GetSendID(ref destID, ref srcID, ref conid);
            if (destID == mln.ProcessUnitManager.INVALID_PUUID)
            {
                mln.Utility.MLN_TRACE_LOG("Fail : GetSendID");
                return(0);
            }
            // if( srcID == ProcessUnitManager::INVALID_PUUID ) return 0;
            UInt32 totalSize = 0;

            //RPCPRINT( fprintf(stderr, "Send_UpdateRoomInfoResult: start") );
            // check send size
            totalSize += 4;             // array num
            if (room_info_len > (UInt32)BattlePuListMaxValues.SEND_UPDATEROOMINFORESULT_ROOM_INFO_LEN_MAX)
            {
                return(0);                                                                                                        // room_info is over size
            }
            //if( room_info.Length < room_info_len ) return 0; // room_info is over size
            // STRUCT TYPE
            for (UInt32 __ind = 0; __ind < room_info_len; __ind++)
            {
                totalSize += BattleRoomInfo.length(room_info[__ind]);
            }
            //if( totalSize > left ) ERROR_RETURN(0);
            // Check size OK
            mln.EndianStream  sendEs = new mln.EndianStream(mln.EndianStream.STREAM_ENDIAN.STREAM_ENDIAN_LITTLE);               // little endian
            mln.PACKET_HEADER sendHead;
            sendHead.type = (UInt32)BattlePuList_FuncID.ID_UPDATEROOMINFORESULT;
            sendHead.dadr = (UInt64)((UInt64)0 << 32 | (UInt64)INTFID.BATTLEPULIST);
            sendHead.sadr = conid;
            sendHead.size = (UInt16)totalSize;
            // serialize
            sendHead.put(sendEs);             // serialize head
            sendEs.put(room_info_len);
            // STRUCT TYPE
            for (UInt32 __ind = 0; __ind < room_info_len; __ind++)
            {
                BattleRoomInfo.set(sendEs, room_info[__ind]);
            }
            //RPCPRINT( "Send_UpdateRoomInfoResult: size %d done", totalSize );
            // send done
            RPCSendPUBase(sendEs, destID, srcID);
            // finish
            ClearSendID();
            return(totalSize);
        }