flagflag  If you want to see English page, please click "English" Button at Left.
Page Top

エラーメッセージ anchor.png

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.ParseGuid2 () [0x00000] in <filename unknown>:0 
 at System.Guid+GuidParser.Parse () [0x00000] in <filename unknown>:0 
 at System.Guid..ctor (System.String g) [0x00000] in <filename unknown>:0 
 at MySql.Data.Types.MySqlGuid.MySql.Data.Types.IMySqlValue.ReadValue (MySql.Data.MySqlClient.MySqlPacket packet, Int64 length, Boolean nullVal) [0x00000] in <filename unknown>:0 
 at MySql.Data.MySqlClient.NativeDriver.ReadColumnValue (Int32 index, MySql.Data.MySqlClient.MySqlField field, IMySqlValue valObject) [0x00000] in <filename unknown>:0 
 at MySql.Data.MySqlClient.Driver.ReadColumnValue (Int32 index, MySql.Data.MySqlClient.MySqlField field, IMySqlValue value) [0x00000] in <filename unknown>:0 
 at MySql.Data.MySqlClient.ResultSet.ReadColumnData (Boolean outputParms) [0x00000] in <filename unknown>:0 
 at MySql.Data.MySqlClient.ResultSet.NextRow (CommandBehavior behavior) [0x00000] in <filename unknown>:0 
 at MySql.Data.MySqlClient.MySqlDataReader.Read () [0x00000] in <filename unknown>:0 
 at OpenSim.Data.MySQL.MySQLGenericTableHandler`1[T].DoQuery (MySql.Data.MySqlClient.MySqlCommand cmd) [0x00000] in <filename unknown>:0 
 at OpenSim.Data.MySQL.MySQLGenericTableHandler`1[T].Get (System.String[] fields, System.String[] keys) [0x00000] in <filename unknown>:0 
 at OpenSim.Data.MySQL.MySQLGenericTableHandler`1[T].Get (System.String field, System.String key) [0x00000] in <filename unknown>:0 
 at OpenSim.Data.MySQL.MySQLPresenceData.Get (UUID sessionID) [0x00000] in <filename unknown>:0 
 at OpenSim.Services.PresenceService.PresenceService.GetAgent (UUID sessionID) [0x00000] in <filename unknown>:0 
 at OpenSim.Server.Handlers.Presence.PresenceServerPostHandler.GetAgent (System.Collections.Generic.Dictionary`2 request) [0x00000] in <filename unknown>:0 
 at OpenSim.Server.Handlers.Presence.PresenceServerPostHandler.Handle (System.String path, System.IO.Stream requestData, OpenSim.Framework.Servers.HttpServer.OSHttpRequest httpRequest, OpenSim.Framework.Servers.HttpServer.OSHttpResponse httpResponse) [0x00000] in <filename unknown>:0
Page Top

Mono anchor.png

  • エラー自体は 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 ();
    }
Page Top

PresenceService.cs anchor.png

  • OpenSim/Services/PresenceService/Presenc​eService.cs の LoginAgent()で Presenceテーブルに HomeRegionIDが設定されないのが原因.
  • 対策としては,とりあえず ログイン時に Presenceテーブルの HomeRegionIDを "00000000-0000-0000-0000-00000000000​0" にする
           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)
     
Page Top

蛇足 anchor.png

Page Top
参考:Presenceの HomeRegionIDを設定する関数例 (ポジション無し.インターフェイス,およびそれを継承している他のクラスにも実装の必要性あり) anchor.png
       public bool SetHomeRegion(UUID sessionID, UUID homeRegionID)
       {      
           PresenceData data = m_Database.Get(sessionID);
           data.Data["HomeRegionID"] = homeRegionID.ToString();
              
           m_Database.Store(data);
           return true;
       }
Page Top
ログイン時の Presenceテーブルのレコード作成シーケンス anchor.png
  • OpenSim/Services/LLLoginService/LLLoginS​ervice.cs
  • success = m_PresenceService.LoginAgent(account.Pri​ncipalID.ToString(), session, secureSession);
    • OpenSim/Services/PresenceService/Presenc​eService.cs
    • LoginAgent() で,Presence データベースのレコードを作成.ただし HomeRegionIDはnull (ParseGuidのエラーの原因)
    • 追加項目: GridUserテーブルから HomeRegionIDを引っ張ってくる.または UUID.Zero を入れる.
       
Page Top
OpenSim/Services/Interfaces/IPresenceSer​vice.cs を継承するクラス anchor.png
    • 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
       
Page Top
HomeRegionIDの設定 anchor.png
  • GridUserテーブルの HomeRegionIDは(ホーム変更時に)OpenSim/Services/UserAccountService/Grid​UserService.cs の SetHome()で設定される
  • ↑これは OpenSim/Server/Handlers/GridUser/GridUse​rServerPostHandler.cs の SetHomeから呼び出される.
     

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   新規 ページ一覧 単語検索 最終更新   ヘルプ   最終更新のRSS 1.0 最終更新のRSS 2.0 最終更新のRSS Atom
Counter: 2165, today: 1, yesterday: 0
最終更新: 2010-05-23 (日) 01:05:19 (JST) (5059d) by admin

サイト内 検索

ログイン

ユーザー名:

パスワード:


パスワード紛失
新規登録

サブ メニュー

ミニカレンダー

前月2024年 3月翌月
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
31
<今日>

オンライン状況

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

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

もっと...

アクセスカウンタ

今日 : 1121711217112171121711217
昨日 : 6869686968696869
総計 : 2318550023185500231855002318550023185500231855002318550023185500
Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Design by XoopsDesign.com