0

我正在重构一个当前使用 XSockets 3.x 的项目,在该项目中,我们使用旧的 ClientGuid 属性跟踪播放会话和客户端之间的映射。

对于 4.0,ClientGuid 的预期替代品是什么?我可以找到 PersistentId 和 ConnectionId 但我不确定要使用哪一个。

这是 3.x 代码中问题的上下文...

public string CreatePlayback( string RecordingID )    {
    string PlayID = SMFRecordServer.Instance.Player.Create( RecordingID, null );
    XSocketMediaSink clientSink = new XSocketMediaSink( PlayID, this.ClientGuid, this );
    lock ( m_tblSessions ){
        if ( m_tblSessions.ContainsKey( ClientGuid ) ){
            m_tblSessions[ ClientGuid ].Add( PlayID, clientSink );
        }else{
            m_tblSessions[ ClientGuid ] = new Dictionary<string,XSocketMediaSink>();
            m_tblSessions[ ClientGuid ].Add( PlayID, clientSink );
        }
    }
    SMFRecordServer.Instance.Player.AttachPlaySink( PlayID, clientSink );
    return PlayID;
}
4

1 回答 1

1

在 4.0 中,这将是...

public string CreatePlayback( string RecordingID )
{
    string PlayID = SMFRecordServer.Instance.Player.Create( RecordingID, null );

    XSocketMediaSink clientSink = new XSocketMediaSink( PlayID, this.ConnectionId, this );

    lock ( m_tblSessions )
    {
        if ( m_tblSessions.ContainsKey( ConnectionId) )
        {
            m_tblSessions[ ConnectionId].Add( PlayID, clientSink );
        }
        else
        {
            m_tblSessions[ ConnectionId] = new Dictionary<string,XSocketMediaSink>();
            m_tblSessions[ ConnectionId].Add( PlayID, clientSink );
        }
    }

    SMFRecordServer.Instance.Player.AttachPlaySink( PlayID, clientSink );

    return PlayID;
}

3.* 和 4.0 之间的一个很大区别是您可以在同一连接上多路复用多个控制器。因此,对于您使用的每个控制器,ConnectionId 都是唯一的,而 PersistentId 则用于连接本身。

因此,在控制器上,您可以获得 this.ConnectionId(以前是 ClientGuid)和 this.PersistentId(以前是 StorageGuid)。您还可以获得 this.Context ,它将包含有关客户端的信息(ConnectionId 不会在那里,因为它在控制器级别)。

于 2014-08-02T17:27:32.693 回答