public static void TraceMessage(TraceLevel level, Message msg, string extraText) { CampfireState campState = CampfireState.Instance; IList <CampfireState.UserInfo> allUsers = campState.Users; CampfireState.UserInfo user = allUsers.FirstOrDefault(u => u.Id == msg.UserId); string userName = (user != null) ? user.NickName : msg.UserId.ToString(); CampfireState.RoomInfo room = campState.Rooms.FirstOrDefault(r => r.Id == msg.RoomId); string roomName = (room != null) ? room.Name : msg.RoomId.ToString(); TraceMessage(level, string.Format("At: {0}, User: {1}, Room: {2}, {3}{4}{5}", msg.PostedAt.ToString(), userName, roomName, (extraText ?? ""), (!string.IsNullOrEmpty(extraText)) ? ": " : "", msg.TrimmedBody)); }
private static void ProcessTextMessage(CampfireState campfireInfo, Message msg, ICampfireAPI api) { // The person that posted this message... If they have a pending notification in the room... then cancel it... they've spoken campfireInfo.RemovePendingNotification(msg.UserId, msg.RoomId, msg.PostedAt, true); IList <CampfireState.UserInfo> allUsers = campfireInfo.Users; IList <CampfireState.UserReference> lazyNotificationUsers; IList <CampfireState.UserReference> immediateNotificationUsers; IList <CampfireState.UserReference> smokeSignalReferences; Utils.FindUserReferences(msg.Body, allUsers, out lazyNotificationUsers, out immediateNotificationUsers, out smokeSignalReferences); CampfireState.UserInfo source = allUsers.FirstOrDefault(u => u.Id == msg.UserId); CampfireState.RoomInfo room = CampfireState.Instance.Rooms.FirstOrDefault(r => r.Id == msg.RoomId); // special smoke signal commands only make sense if a legitimate user issued them if (source != null) { foreach (CampfireState.UserReference ri in smokeSignalReferences) { ri.SourceUser = source; ri.Room = room; ProcessSmokeSignalCommands(source.Id, ri); } } foreach (CampfireState.UserReference ri in immediateNotificationUsers) { ri.SourceUser = source; ri.Room = room; campfireInfo.AddPendingNotification(ri, msg.PostedAt.AddSeconds(0)); } foreach (CampfireState.UserReference ri in lazyNotificationUsers) { ri.SourceUser = source; ri.Room = room; int delay = ri.TargetUser.DelayInMinutes > 0 ? ri.TargetUser.DelayInMinutes : SmokeSignalConfig.Instance.DelayBeforeSmokeSignalInMinutes; campfireInfo.AddPendingNotification(ri, msg.PostedAt.AddSeconds(delay * 60)); } }