View of /trunk/GridServer/Extensions/Simple/SimpleSessions.cs
Parent Directory
|
Revision Log
Revision 65 -
(download)
(annotate)
Fri Jan 9 02:24:28 2009 UTC (4 years, 4 months ago) by jhurliman
File size: 4764 byte(s)
Fri Jan 9 02:24:28 2009 UTC (4 years, 4 months ago) by jhurliman
File size: 4764 byte(s)
Replaced UserServer project with GridServer * Broke inventory classes in AssetServer out into a separate source file * Updated HttpServer.dll to a new version that supports IHttpRequest.RemoteEndPoint
/*
* Copyright (c) 2008 Intel Corporation
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* -- Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* -- Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* -- Neither the name of the Intel Corporation nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
using ExtensionLoader;
using OpenMetaverse;
namespace GridServer.Extensions
{
public class SimpleSessions : IExtension<GridServer>, ISessionProvider
{
GridServer server;
ExpiringCache<UUID, UUID> authTokenToAvatar = new ExpiringCache<UUID, UUID>();
Dictionary<UUID, UUID> avatarToAuthToken = new Dictionary<UUID, UUID>();
object syncRoot = new object();
public SimpleSessions()
{
}
public void Start(GridServer server)
{
this.server = server;
}
public void Stop()
{
}
public UUID CreateSession(UUID avatarID)
{
lock (syncRoot)
{
Avatar avatar;
if (server.AvatarProvider.TryGetAvatar(avatarID, out avatar))
{
UUID authToken = UUID.Random();
authTokenToAvatar.AddOrUpdate(authToken, avatarID, TimeSpan.FromMinutes(30));
avatarToAuthToken[avatarID] = authToken;
return authToken;
}
else
{
return UUID.Zero;
}
}
}
public bool RemoveSession(UUID authToken)
{
lock (syncRoot)
{
UUID avatarID;
if (authTokenToAvatar.TryGetValue(authToken, out avatarID))
{
avatarToAuthToken.Remove(avatarID);
return authTokenToAvatar.Remove(authToken);
}
else
{
return false;
}
}
}
public bool RemoveSessionByAvatarID(UUID avatarID)
{
lock (syncRoot)
{
UUID authToken;
if (avatarToAuthToken.TryGetValue(avatarID, out authToken))
{
authTokenToAvatar.Remove(authToken);
return avatarToAuthToken.Remove(avatarID);
}
else
{
return false;
}
}
}
public bool TryGetAvatar(UUID authToken, out Avatar avatar)
{
lock (syncRoot)
{
UUID avatarID;
if (authTokenToAvatar.TryGetValue(authToken, out avatarID))
{
return server.AvatarProvider.TryGetAvatar(avatarID, out avatar);
}
else
{
avatar = null;
return false;
}
}
}
public bool TryGetSession(UUID avatarID, out UUID authToken)
{
lock (syncRoot)
return avatarToAuthToken.TryGetValue(avatarID, out authToken);
}
public int CurrentSessionCount()
{
return authTokenToAvatar.Count;
}
}
}
| ViewVC Help | |
| Powered by ViewVC 1.0.0 |

