flagflag  
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から呼び出される.
     

Front page   Freeze Diff Backup Copy Rename Reload   New List of Pages Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Counter: 2173, today: 1, yesterday: 0
Last-modified: 2010-05-23 (Sun) 01:05:19 (JST) (5086d) by admin

Site Search

Login

Username:

Password:


Lost Password?
Register now!!

Sub Menu

mini Calendar

Last MonthApr 2024Next Month
Su Mo Tu We Th Fr Sa
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
Today

Who's Online

98 user(s) are online (7 user(s) are browsing xpwiki)

Members: 0
Guests: 98

more...

Access Counter

Today : 2121
Yesterday : 1406514065140651406514065
Total : 2334104323341043233410432334104323341043233410432334104323341043
Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Design by XoopsDesign.com