我正在使用SignalR編寫基於C#的Web應用程序。到目前爲止,我有一個「大廳」區域(允許開放通信)和一個「會話」區域(5人可以進行私人對話,任何服務器交互只顯示給該羣組)。在信號中記錄服務器事件R
我想要做的是在內存中創建一個「日誌記錄」對象 - 每個會話一個(所以如果有三個五人組,我會有三個日誌記錄對象)。
的 '會話' 區域從Hubs
(和IDisconnect
)繼承,並且有幾種方法(加入,發送,斷開等)。這些方法將數據傳回給調用客戶端JS函數的JavaScript客戶端。我嘗試過使用構造函數方法:
public class Session : Hub, IDisconnect
{
public class Logger
{
public List<Tuple<string, string, DateTime>> Log;
public List<Tuple<string, string, DateTime>> AddEvent(string evt, string msg, DateTime time)
{
if (Log == null)
{
Log = new List<Tuple<string, string, DateTime>>();
}
Log.Add(new Tuple<string, string, DateTime>(evt, msg, time));
return Log;
}
}
public Logger eventLog = new Logger();
public Session()
{
eventLog = new Logger();
eventLog.AddEvent("LOGGER INITIALIZED", "Logging started", DateTime.Now);
}
public Task Join(string group)
{
eventLog.AddEvent("CONNECT", "User connect", DateTime.Now);
return Groups.Add(Context.ConnectionId, group);
}
public Task Send(string group, string message)
{
eventLog.AddEvent("CHAT", "Message Sent", DateTime.Now);
return Clients[group].addMessage(message);
}
public Task Interact(string group, string payload)
{
// deserialise the data
// pass the data to the worker
// broadcast the interaction to everyone in the group
eventLog.AddEvent("INTERACTION", "User interacted", DateTime.Now);
return Clients[group].interactionMade(payload);
}
public Task Disconnect()
{
// grab someone from the lobby?
eventLog.AddEvent("DISCONNECT","User disconnect",DateTime.Now);
return Clients.leave(Context.ConnectionId);
}
}
但是這會導致每次用戶與服務器交互時都會重新創建記錄器。
有誰知道我會怎樣才能創建一個記錄每個新的會話,並添加到它的元素?還是有更簡單的方法來做到這一點,我只是在解決問題?
非常感謝 - 現在我看完了。我對C#相對來說比較陌生,所以最好學習更精細的點:) – MassivePenguin
SignalR中現在有一個持久連接類型來保存數據或集線器。 –