[Unity]利用Postman搭建方便的協(xié)議調(diào)試工具

為了解耦服務(wù)器與客戶端的開發(fā)流程诲宇,決定在游戲內(nèi)搭建一個httpserver用于模塊協(xié)議的發(fā)送與接收
功能

  • 獲取pb結(jié)構(gòu)惶翻,轉(zhuǎn)成json格式輸出
  • 模擬客戶端發(fā)送消息給服務(wù)器
  • 模擬服務(wù)器發(fā)送消息給客戶端
  • 監(jiān)聽服務(wù)器發(fā)送給客戶端的消息,并以json的方式輸出解析后的結(jié)果

實現(xiàn)

  • 利用C#的反射特性纺荧,根據(jù)proto協(xié)議名得到pb消息類型
  • 利用json數(shù)據(jù)反序列化得到proto對象
  • 通過游戲內(nèi)網(wǎng)絡(luò)模塊的Send接口來模擬發(fā)送消息給服務(wù)器
  • 通過游戲內(nèi)網(wǎng)絡(luò)模塊的Push事件來模擬服務(wù)器發(fā)送消息給客戶端
  • 在debug模式下支持注冊監(jiān)聽的協(xié)議id宙暇,在收到服務(wù)器請求時,將pb消息序列化成json輸出到Console

使用

  • Json示例:
{
    "protoName": "MoonClient.RpcC2G_RoleRevive",
    "protoData": {
        "type": 1,
        "roleId": 1565928
    }
}
  • 流程圖


    數(shù)據(jù)流轉(zhuǎn)流程圖.png
  • Get請求:

Request URL: http://127.0.0.1:8008/
HttpMethod: Get
Headers: 
KEY       VALUE
protoName RpcC2G_RoleRevive

參數(shù)填好后點擊“Send”,HttpServer響應(yīng)后會在下?Body中輸出protoName的json結(jié)構(gòu)(注意需要選擇json格式顯示)
如下圖所示:


Get請求1.png

Get請求2.png
  • Post請求:
Request URL: http://127.0.0.1:8008/
HttpMethod: Post 
Body: 選擇raw => JSON(application/jsoon)

拷?Get請求中返回的json數(shù)據(jù)到body后蜻拨,再次修改相關(guān)參數(shù)的數(shù)值缎讼,點擊“發(fā)送”便可坑匠。
模擬消息發(fā)送成功后會在下?打印相關(guān)描述,如下圖所示:


Post請求.png

關(guān)鍵代碼

  • pb轉(zhuǎn)json
        private static string getJsonFromPB(string pbType)
        {
            Type t = Type.GetType(pbType);
            if (t == null)
            {
                MDebug.singleton.AddErrorLogF("找不到對應(yīng)類型定義:{0}", pbType);
                return string.Empty;
            }

            IMessage msg = Activator.CreateInstance(t) as IMessage;
            var fields = msg.Descriptor.Fields.InFieldNumberOrder();
            StringBuilder jsonStr = new StringBuilder("{");
            string value;
            for (int i = 0; i < fields.Count; i++)
            {
                var field = fields[i];
                switch (field.FieldType)
                {
                    case Google.Protobuf.Reflection.FieldType.Bool:
                        value = "true";
                        break;
                    case Google.Protobuf.Reflection.FieldType.Bytes:
                    case Google.Protobuf.Reflection.FieldType.String:
                        value = "\"\"";
                        break;
                    case Google.Protobuf.Reflection.FieldType.Group:
                        value = "\"unsupported type:Group\"";
                        break;
                    case Google.Protobuf.Reflection.FieldType.Message:
                        value = getJsonFromPB(field.MessageType.FullName);
                        break;
                    default:
                        value = "0";
                        break;
                }

                if (i > 0)
                {
                    jsonStr.Append(",");
                }
                jsonStr.Append("\"").Append(field.JsonName).Append("\":");
                if (field.IsRepeated)
                {
                    jsonStr.Append("[");
                }
                jsonStr.Append(value);
                if (field.IsRepeated)
                {
                    jsonStr.Append("]");
                }
            }

            return jsonStr.Append("}").ToString();
        }
  • json轉(zhuǎn)pb
        Type pbType = Type.GetType(pbTypeStr);
        IMessage pbObj = Activator.CreateInstance(pbType) as IMessage;
        pbObj = pbObj.Descriptor.Parser.ParseJson(httpResult["protoData"].ToJson());
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末设凹,一起剝皮案震驚了整個濱河市舰讹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌闪朱,老刑警劉巖月匣,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奋姿,居然都是意外死亡锄开,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門称诗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萍悴,“玉大人,你說我怎么就攤上這事寓免。” “怎么了袜香?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵撕予,是天一觀的道長。 經(jīng)常有香客問我困鸥,道長嗅蔬,這世上最難降的妖魔是什么剑按? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮澜术,結(jié)果婚禮上艺蝴,老公的妹妹穿的比我還像新娘。我一直安慰自己鸟废,他們只是感情好,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布缩擂。 她就那樣靜靜地躺著添寺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪博脑。 梳的紋絲不亂的頭發(fā)上票罐,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音疗杉,去河邊找鬼蚕礼。 笑死,一個胖子當著我的面吹牛净赴,可吹牛的內(nèi)容都是我干的罩润。 我是一名探鬼主播翼馆,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼严沥!你這毒婦竟也來了中姜?” 一聲冷哼從身側(cè)響起跟伏,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤受扳,失蹤者是張志新(化名)和其女友劉穎兔跌,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體华望,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡仅乓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年夸楣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洞慎。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡嘿棘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出焦人,到底是詐尸還是另有隱情,我是刑警寧澤花椭,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布矿辽,位于F島的核電站,受9級特大地震影響袋倔,放射性物質(zhì)發(fā)生泄漏折柠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一前塔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧华弓,春花似錦、人聲如沸慌洪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欧引。三九已至,卻和暖如春憋肖,著一層夾襖步出監(jiān)牢的瞬間婚苹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工怎炊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留廓译,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓瓜挽,卻偏偏與公主長得像征绸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子管怠,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容