flagflag  If you want to see English page, please click "English" Button at Left.
2: 2010-05-22 (土) 10:28:38 admin ソース 3: 2010-05-22 (土) 19:16:09 admin ソース
Line 1: Line 1:
- 03:12:20 - [PRESENCE HANDLER]: Exception in method getagent: System.FormatException: Invalid format for Guid.Guid(string).+** Invalid format for Guid.Guid [#re2c7dd6] 
 +- ログイン時に Robost.exe がエラーを出して,ログインが取り消される. 
 +#br 
 + 
 +*** エラーメッセージ [#ma6a3d99] 
 + 03:12:20 - [PRESENCE HANDLER]: Exception in method getagent: System.FormatException: Invalid format for Guid.Guid(string).
  at System.Guid+GuidParser.ParseChar (Char c) [0x00000] in <filename unknown>:0   at System.Guid+GuidParser.ParseChar (Char c) [0x00000] in <filename unknown>:0
  at System.Guid+GuidParser.ParseGuid2 () [0x00000] in <filename unknown>:0   at System.Guid+GuidParser.ParseGuid2 () [0x00000] in <filename unknown>:0
Line 19: Line 24:
-- mcs/class/corlib/System/Guid.cs+*** Mono [#i5077b7b] 
 +- エラー自体は Monoのエラー 
 +- mcs/class/corlib/System/Guid.csの GuidParserで src="" が渡されるのが原因 
 +- つまり,GUIDの検査で NULL文字 "" が渡されて,例外を起こす. 
 +- ParseGuid1() で System.IndexOutOfRangeException を起こし,キャッチされて ParseGuid2() に渡され System.FormatException: Invalid format for Guid.Guid(string) を起こす, 
 +- 本来は OpenSimのバグだが,GuidParserのコンストラクタで,以下のようにしてしまうのも一つの手 
 + public GuidParser (string src) 
 + { 
 +   if (src=="") { 
 +       //System.Console.WriteLine("====> System.GuidParser: Inputed src is null"); 
 +       src = "00000000-0000-0000-0000-000000000000"; 
 +   } 
 +   _src = src; 
 +   Reset (); 
 + } 
 + 
 +*** PresenceService.cs [#mc801b2e] 
 +- OpenSim/Services/PresenceService/Presenc​eService.cs の LoginAgent()で Presenceテーブルに HomeRegionIDが設定されないのが原因. 
 +- 対策としては,とりあえず ログイン時に Presenceテーブルの HomeRegionIDを "00000000-0000-0000-0000-000000000000" にする 
 +       public bool LoginAgent(string userID, UUID sessionID, 
 +               UUID secureSessionID) 
 +       { 
 +           PresenceData[] d = m_Database.Get("UserID", userID); 
 + 
 +           PresenceData data = new PresenceData(); 
 + 
 +           data.UserID = userID; 
 +           data.RegionID = UUID.Zero; 
 +           data.SessionID = sessionID; 
 +           data.Data = new Dictionary<string, string>(); 
 +           data.Data["SecureSessionID"] = secureSessionID.ToString(); 
 +           // added by Fumi.Iseki 
 +           data.Data["HomeRegionID"] = UUID.Zero.ToString(); 
 + 
 +           m_Database.Store(data); 
 + 
 +           m_log.DebugFormat("[PRESENCE SERVICE]: LoginAgent {0} with session {1} and ssession {2}", 
 +               userID, sessionID, secureSessionID); 
 +           return true; 
 +       } 
 +- 本来は ホームの情報を GridUserレコードから引っ張って来るべきだが,PresenceのHomeRegionIDは現在はまだ未使用のよう (r12862) 
 +#br 
 + 
 +*** 蛇足 [#z9ca90bb] 
 +**** 参考:Presenceの HomeRegionIDを設定する関数例 (ポジション無し.インターフェイス,およびそれを継承している他のクラスにも実装の必要性あり) [#tc1b64e3] 
 +       public bool SetHomeRegion(UUID sessionID, UUID homeRegionID) 
 +       { 
 +           PresenceData data = m_Database.Get(sessionID); 
 +           data.Data["HomeRegionID"] = homeRegionID.ToString(); 
 + 
 +           m_Database.Store(data); 
 +           return true; 
 +       } 
 + 
 +**** ログイン時の Presenceテーブルのレコード作成 [#m5efb2ae] 
 +- OpenSim/Services/LLLoginService/LLLoginS​ervice.cs 
 +-- success = m_PresenceService.LoginAgent(account.Pri​ncipalID.ToString(), session, secureSession); 
 +--- /OpenSim/Services/PresenceService/Presen​ceService.cs 
 +---- LoginAgent() で,Presence データベースのレコードを作成.ただし HomeRegionIDはnull (ParseGuidのエラーの原因) 
 +---- GridUserテーブルから HomeRegionIDを引っ張ってくる.または UUID.Zero を入れる. 
 +#br 
 + 
 +**** OpenSim/Services/Interfaces/IPresenceSer​vice.cs を継承するクラス [#p832cab3] 
 +-- OpenSim/Services/PresenceService/Presenc​eService.cs 
 +-- OpenSim/Services/Connectors/Presence/Pre​senceServiceConnector.cs 
 +-- OpenSim/Region/CoreModules/ServiceConnec​torsOut/Presence/LocalPresenceServiceCon​nector.cs 
 +-- OpenSim/Region/CoreModules/ServiceConnec​torsOut/Presence/RemotePresenceServiceCo​nnector.cs 
 +#br
- XXXX GuidParser src = bfe0c255-0000-0000-0000-000000000000 +**** HomeRegionIDの設定 [#x7adb4f5] 
- 111111111111111111111111111111111111111​1111111111111111111111111111111111111111​1111111 +- GridUserテーブルの HomeRegionIDは(ホーム変更時に)OpenSim/Services/UserAccountService/Grid​UserService.cs の SetHome()で設定される 
- 0000 ParseOptChar { = b +- ↑これは OpenSim/Server/Handlers/GridUser/GridUse​rServerPostHandler.cs の SetHomeから呼び出される. 
- 0000 ParseOptChar ( = b +#br
- 0000 ParseOptChar - = - +
- 0000 ParseOptChar - = - +
- 0000 ParseOptChar - = - +
- 0000 ParseOptChar - = +
- 111111111111EEEEEEEEEEEEEEEEEEEEEEEEEEE​EEEEEEEEEEEEEEEEEE1111111111111111111111​1111111+


トップ   新規 ページ一覧 単語検索 最終更新   ヘルプ   最終更新のRSS 1.0 最終更新のRSS 2.0 最終更新のRSS Atom

サイト内 検索

ログイン

ユーザー名:

パスワード:


パスワード紛失
新規登録

サブ メニュー

ミニカレンダー

前月2024年 4月翌月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
<今日>

オンライン状況

111 人のユーザが現在オンラインです。 (26 人のユーザが xpwiki を参照しています。)

登録ユーザ: 0
ゲスト: 111

もっと...

アクセスカウンタ

今日 : 4295429542954295
昨日 : 1529415294152941529415294
総計 : 2339899523398995233989952339899523398995233989952339899523398995
Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Design by XoopsDesign.com