@@ -577,8 +577,16 @@ private void MetaProvider_Received(object sender, Metadata.IMetaMessage e)
577577 } ) ;
578578 break ;
579579 case Metadata . Disconnect disconnect :
580- SendSystemInfo ( $ "コメントデータサーバーとの接続が切断されました{ Environment . NewLine } 原因:{ disconnect . Reason } ", InfoType . Notice ) ;
581- //Disconnect();
580+ if ( disconnect . Reason == "END_PROGRAM" )
581+ {
582+ SendSystemInfo ( $ "配信が終了したため切断します。", InfoType . Notice ) ;
583+ Disconnect ( ) ;
584+ }
585+ else
586+ {
587+ SendSystemInfo ( $ "コメントデータサーバーとの接続が切断されました{ Environment . NewLine } 原因:{ disconnect . Reason } ", InfoType . Notice ) ;
588+ //Disconnect();
589+ }
582590 break ;
583591 case Metadata . ServerTime serverTime :
584592 break ;
@@ -641,6 +649,39 @@ public async Task ProcessChunkedEntry(ChunkedEntry entry)
641649
642650 RemoveDisconnectedServers ( ) ;
643651
652+ //デバック用
653+ //名札付きコメント
654+ //string base64String = "Cj4KJEVoa0tFZ2sxYzctSzIxbVJBUkZVMkdhZVVHcFVqQkNnMDVjShIMCIXh+7UGEMiC64gDGggKBgiCnOKkARI3CjUKG+ebuOaJi+OBr+epuuOBqOa1t+OBoOOBi+OCiRIG44K/44ONGPXpoAwoi5zhFjoAQIPdBQ==";
655+ //匿名コメント
656+ //string base64String = "Cj4KJEVoa0tFZ2tTZG9KdDIxbVJBUkVkRXYwN0x1YTZqUkNnMDVjShIMCP7g+7UGELjpyaEBGggKBgiCnOKkARJlCmMKQOOCguOBl+OBi+OBl+OBpuOBvuOBoOatjOiInuS8juW6p+OCv+ODr+ODvOOBq+WFpeOCjOOBquOBhOOBru+8n3cYtuegDCABMhJhOm9QanZWSHEwN2txa3k1c206AECA3QU=";
657+ //22位にランクインしました
658+ //string base64String = "Cj4KJEVoa0tFZ25iZmhQbkcxdVJBUkVseUdrSF9yUWd2eEN3OF9rSxIMCIiF/bUGEICjhNMDGggKBgjJ2eOkARIqOigyJuesrDIy5L2N44Gr44Op44Oz44Kv44Kk44Oz44GX44G+44GX44Gf";
659+ //「縁日射的」がリクエストされました
660+ //string base64String = "Cj0KJEVoa0tFZ2wtZFdyeVBsbVJBUkhiejZsZnZoNjZoeENVanQ0SxILCO+Q+7UGEPj2wGQaCAoGCPfB46QBEjc6NQoz44CM57iB5pel5bCE55qE44CN44GM44Oq44Kv44Ko44K544OI44GV44KM44G+44GX44Gf";
661+ //匿名プレミアム
662+ //string base64String = "Cj4KJEVoa0tFZ240YzlkaXgxMlJBUkVGT3Q3VEpKWU5saENFMHEwTBIMCIHj/7UGEPCHwOYCGggKBgiUheSkARIwCi4KDmh0dHAgY2xpZW5077yfGIXKBSABMhJhOjZMWHZ4ZEFPR1Q4V0RCZUM6AEAD";
663+ //名札プレミアム
664+ //string base64String = "Cj4KJEVoa0tFZ25nZVpjaEcxdVJBUkZsb05PRU9pQUNsQkN3OF9rSxIMCNaE/bUGENDy8skBGggKBgjJ2eOkARIwCi4KFemZveawl+OBqu+8ou+8p++8reOBjBIFR29oZXkYraQKIAEo5+ejAjoAQMAC";
665+ //「ゲーム」が好きな2人が来場しました
666+ //string base64String = "Cj4KJEVoa0tFZ25BY1d0aUhGdVJBUkUwWVJ4SEFISW1weEN3OF9rSxIMCKiF/bUGEOjI54gCGggKBgjJ2eOkARI4OjY6NOOAjOOCsuODvOODoOOAjeOBjOWlveOBjeOBqjLkurrjgYzmnaXloLTjgZfjgb7jgZfjgZ8=";
667+ // 3時間延長しました
668+ //string base64String = "Cj4KJEVoa0tFZ2tlYzYzZ2gyT1JBUkVpNmVWNnpLZjJzQkRUNVlnTRIMCPbUhbYGEJiU0cgDGggKBgjbzuSkARIdOhsqGTPmmYLplpPlu7bplbfjgZfjgb7jgZfjgZ8=";
669+ //運営、放送者コメント(リンクあり)
670+ //string base64String = "Cj4KJEVoa0tFZ21SY3hvSHFsbVJBUkZPdE1ReVVXUGFtUkNoMDVjShIMCNjH+7UGEPCEpZkDGggKBgiCnOKkASLwAiLtAgrqAgrnAgq4AuS9nOOBo+OBn+OCv+ODreODg+ODiOOBp+WNoOOBo+OBn+e1kOaenOOBjOS6uuOAheOBrumBi+WRveOCkuW3puWPs+OBmeOCi+ODh+ODg+OCreani+eviUFEVuOAjlRoZSBDb3NtaWMgV2hlZWwgU2lzdGVyaG9vZOOAj+OBjFN0ZWFt44Gr44GmNDAl44Kq44OV44GuMTIwMOWGhuOBq+OAguWNoOOBhOOBruWKm+OCkuaMgeOBpOmtlOWls+OBqOOBl+OBpuOCquODquOCuOODiuODq+OBruOCv+ODreODg+ODiOOCkuS9nOOCiuOAgeW8leOBhOOBn+OCq+ODvOODieOBruOAjOino+mHiOOAjeOBp+ebuOaJi+OBrumBi+WRveOBjOWkieOCj+OBo+OBpuOBhOOBjyIqaHR0cHM6Ly9uZXdzLm5pY292aWRlby5qcC93YXRjaC9udzE2MjU3NTMy";
671+ //放送者コメント(リンクなし)
672+ //string base64String = "Cj4KJEVoa0tFZ242ZEVqNG9HT1JBUkhBUmlGZE9iOHdnUkRVNVlnTRIMCOPhhbYGEID84b4BGggKBgjbzuSkASI/Ij0KOwo1CjPpm7vlrZDjg6zjg7PjgrjjgafjgrPjg6Hjg5Pjg6XokL3jgaHjgabjgZ/jgZnjgb7jgpMaAggP";
673+ //投票開始
674+ //string base64String = "Cj4KJEVoa0tFZ21sZVpCV0pWbVJBUkdGX3RJa2hPT0V1eENPdC1ZSxIMCOCD+7UGEODnmbMDGggKBgjMyOOkASJCEkAKD+OCouODs+OCseODvOODiBIOCgzjg6njg7zjg6Hjg7MSCwoJ44GG44Gp44KTEg4KDOOBneOBhuOCgeOCkxgB";
675+ //投票結果
676+ //string base64String = "Cj4KJEVoa0tFZ25IY21ka0pWbVJBUkYwU2RSMEpPMFVyaENPdC1ZSxIMCOSD+7UGENDE/tgBGggKBgjMyOOkASJJEkcKD+OCouODs+OCseODvOODiBIQCgzjg6njg7zjg6Hjg7MYABINCgnjgYbjganjgpMYABIRCgzjgZ3jgYbjgoHjgpMY6AcYAg==";
677+ //投票結果非表示(エラーなく無視する必要がある)
678+ //string base64String = "Cj4KJEVoa0tFZ2x4Zng2MkhGbVJBUkdkQzVvQ0FGOUlxUkNPdC1ZSxIMCKv/+rUGEND7tYYCGggKBgjMyOOkASICEgA=";
679+
680+ //Base64文字列をbyte[] に変換
681+ //byte[] byteArray = Convert.FromBase64String(base64String);
682+ //var chunkedMessage = ChunkedMessage.Parser.ParseFrom(byteArray);
683+ //await ProcessChunkedMessage(chunkedMessage);
684+
644685 var segmentServer = new SegmentServerClient ( Uri , ProcessChunkedMessage ) ;
645686 _segmentServers . Add ( segmentServer ) ;
646687 var task = segmentServer . doConnect ( ) ;
@@ -695,7 +736,7 @@ public async Task ProcessChunkedMessage(ChunkedMessage message)
695736
696737 var comment = new NicoSpi ( Ichiba )
697738 {
698- Text = notification . Ichiba ,
739+ Text = Ichiba ,
699740 PostedAt = date ,
700741 } ;
701742 var metadata = new SpiMessageMetadata ( comment , _options , _siteOptions )
@@ -810,6 +851,10 @@ public async Task ProcessChunkedMessage(ChunkedMessage message)
810851
811852 if ( message . State . Enquete != null )
812853 {
854+ if ( message . State . Enquete ? . Question == null || message . State . Enquete ? . Question == "" )
855+ {
856+ return ;
857+ }
813858 var vote = message . State . Enquete ;
814859 if ( ! vote . Status . Equals ( Status . Closed ) ) //0 = closedは送られてこないので無視
815860 {
@@ -864,31 +909,50 @@ public async Task ProcessChunkedMessage(ChunkedMessage message)
864909 var chat = message . Message . Chat ;
865910 var content = chat . Content ;
866911 var vpos = chat . Vpos ;
867- // string? userId = null ;
868- // if (chat.RawUserId != 0)
869- // {
870- // userId = chat.RawUserId.ToString();
871- // }
912+ string userId = "" ;
913+ if ( chat . RawUserId != 0 && chat . Name != null && chat . Name != "" )
914+ {
915+ userId = chat . Name + "(" + chat . RawUserId . ToString ( ) + ")" ;
916+ }
872917 var name = "" ;
873918 if ( chat . HashedUserId != null && chat . HashedUserId != "" )
874919 {
875- name = chat . HashedUserId . Substring ( 2 ) ; //a:
920+ userId = chat . HashedUserId . Substring ( 2 ) ; //a:
876921 }
922+
923+
877924 var anonymity = true ;
878925 var no = chat . No ;
879926 if ( chat . Name != null && chat . Name != "" )
880927 {
881- name = chat . Name + "(" + chat . RawUserId + ")" ;
928+ name = chat . Name ; // + "(" + chat.RawUserId + ")";
882929 anonymity = false ;
883930 }
884931 var isPremium = chat . AccountStatus == 0 ? "normal" : "premium" ;
885- if ( isPremium == "premium" )
932+ if ( anonymity )
886933 {
887- name = "a:premium:" + name ;
934+ if ( userId != "" )
935+ {
936+
937+ if ( isPremium == "premium" )
938+ {
939+ userId = "a:premium:" + userId ;
940+ }
941+ else
942+ {
943+ userId = "a:" + userId ;
944+ }
945+ }
888946 }
889947 else
890948 {
891- name = "a:" + name ;
949+ if ( userId != "" )
950+ {
951+ if ( isPremium == "premium" )
952+ {
953+ userId = userId + "(premium)" ;
954+ }
955+ }
892956 }
893957 var at = Now ( ) ;
894958 if ( message . Meta ? . At != null )
@@ -901,6 +965,10 @@ public async Task ProcessChunkedMessage(ChunkedMessage message)
901965 {
902966 thumbNailUrl = GetThumbnail ( chat . RawUserId . ToString ( ) ) ;
903967 }
968+ //if(userId == null)
969+ //{
970+ // userId = name;
971+ //}
904972
905973
906974 var comment = new NicoComment ( "" )
@@ -910,21 +978,21 @@ public async Task ProcessChunkedMessage(ChunkedMessage message)
910978 Is184 = anonymity ,
911979 PostedAt = at ,
912980 Text = content ,
913- UserId = name ,
981+ UserId = userId ,
914982 UserName = name ,
915983 ThumbnailUrl = thumbNailUrl ,
916984 } ;
917985
918- var user = GetUser ( name ) ;
986+ var user = GetUser ( userId ) ;
919987 bool isFirstComment ;
920- if ( _userCommentCountDict . ContainsKey ( name ) )
988+ if ( _userCommentCountDict . ContainsKey ( userId ) )
921989 {
922- _userCommentCountDict [ name ] ++ ;
990+ _userCommentCountDict [ userId ] ++ ;
923991 isFirstComment = false ;
924992 }
925993 else
926994 {
927- _userCommentCountDict . AddOrUpdate ( name , 1 , ( s , n ) => n ) ;
995+ _userCommentCountDict . AddOrUpdate ( userId , 1 , ( s , n ) => n ) ;
928996 isFirstComment = true ;
929997 }
930998
0 commit comments