Beispiel #1
0
 public void Init(object sender, AddUserEvent e)
 {
     if (e.User.Signature == "我是人工智能微软小冰~~")
     {
         init      = true;
         xiaobinId = e.User.UserName;
         Log("初始化成功");
     }
 }
        /// <summary>
        /// Adds a new user to the service
        /// </summary>
        /// <param name="user">A user</param>
        public void Add(User user)
        {
            UserService.Add(user);
            if (Logging)
            {
                Trace.WriteLine("-----------------------------");
                Trace.WriteLine("    This is a log message");
                Trace.WriteLine("Master is adding");
                Trace.WriteLine("-----------------------------\n");
            }

            AddUserEvent?.Invoke(user);
        }
Beispiel #3
0
        /// <summary>
        /// Add a user to server
        /// </summary>
        /// <param name="user">user</param>
        /// <returns>true => success</returns>
        public static bool AddUser(User user)
        {
            Area.Server server = Area.Server.Instance;
            Event       e      = new AddUserEvent(HttpEventSource.EXT, HttpEventType.COMMAND, user, user);
            var         answer = server.Dispatcher.Trigger(e);

            if (answer.Status.Code != 200)
            {
                Console.Error.WriteLine("Error: AddUser => " + answer.Status.Message);
                return(false);
            }
            return(true);
        }
Beispiel #4
0
        private static IHangouts GetHangouts(JsonReader jsonTextReader)
        {
            Hangouts hangouts        = new Hangouts();
            JObject  hangoutsJObject = JObject.Load(jsonTextReader);
            JToken   rawConvos       = hangoutsJObject["conversation_state"];

            for (int convoIndex = 0; convoIndex < rawConvos.Count(); convoIndex++)
            {
                JToken rawConvo    = rawConvos[convoIndex];
                JToken innerConvo  = rawConvo["conversation_state"]["conversation"];
                JToken innerEvents = rawConvo["conversation_state"]["event"];
                JToken pdata       = innerConvo["participant_data"];

                string hangoutType = innerConvo["type"]?.ToString();
                string hangoutName = innerConvo["name"]?.ToString();

                if (string.IsNullOrEmpty(hangoutName))
                {
                    hangoutName = $"Hangout_{(convoIndex + 1).ToString().PadLeft(3, '0')}";
                }

                List <IParticipant> hangoutParticipants =
                    (
                        from JToken p
                        in pdata
                        select new Participant(p["id"]["chat_id"].ToString(), p["fallback_name"]?.ToString() ?? $"unknown_{p["id"]["chat_id"]}") as IParticipant
                    ).ToList();

                List <IHangoutEvent> hangoutEvents = new List <IHangoutEvent>();
                foreach (JToken innerEvent in innerEvents)
                {
                    JToken   messageContent  = innerEvent["chat_message"]?["message_content"];
                    JToken   messageSegments = messageContent?["segment"];
                    string   senderId        = innerEvent["sender_id"]["gaia_id"].ToString();
                    DateTime timeStamp       =
                        new DateTime(1970, 1, 1).AddSeconds(
                            Convert.ToDouble(innerEvent["timestamp"].ToString().Substring(0, 10)));
                    string       eventTypeString = innerEvent["event_type"].ToString();
                    IParticipant sender          =
                        (
                            from IParticipant p
                            in hangoutParticipants
                            where p.Id == senderId
                            select p
                        ).DefaultIfEmpty(new Participant(senderId, $"unknown_{senderId}")).First();

                    // combine all message segments
                    string allMessageSegments = string.Empty;
                    if (messageSegments != null && messageSegments.Any())
                    {
                        StringBuilder sb = new StringBuilder();
                        for (int sgmntIndex = 0; sgmntIndex < messageSegments.Count(); sgmntIndex++)
                        {
                            JToken sgmnt = messageSegments[sgmntIndex];
                            if (sgmnt?["type"] == null)
                            {
                                continue;
                            }
                            switch (sgmnt["type"].ToString())
                            {
                            case "LINE_BREAK":
                                sb.Append(Environment.NewLine);
                                break;

                            default:
                                if (sgmnt["text"] != null)
                                {
                                    sb.Append(sgmnt["text"]);
                                }
                                break;
                            }
                        }
                        allMessageSegments = sb.ToString();
                    }

                    // combine all attachment segments
                    string attachmentUrl = string.Empty;
                    JToken attachments   = messageContent?["attachment"];
                    if (attachments != null)
                    {
                        StringBuilder sb = new StringBuilder();
                        for (int attIndex = 0; attIndex < attachments.Count(); attIndex++)
                        {
                            JToken att = attachments[attIndex];
                            if (att["embed_item"]["type"][0].ToString() != "PLUS_PHOTO")
                            {
                                continue;
                            }
                            string imgurl = att["embed_item"]["embeds.PlusPhoto.plus_photo"]["url"].ToString();
                            sb.Append(imgurl);
                        }
                        attachmentUrl = sb.ToString();
                    }

                    IHangoutEvent hangoutEvent;
                    switch (eventTypeString)
                    {
                    case RenameConversationEventTypeJToken:
                        string oldName = innerEvent["conversation_rename"]["old_name"].ToString();
                        string newName = innerEvent["conversation_rename"]["new_name"].ToString();
                        hangoutEvent = new RenameConversationEvent(timeStamp, sender, allMessageSegments, attachmentUrl, oldName, newName);
                        break;

                    case VideoChatEventTypeJToken:
                        string eventType = innerEvent["hangout_event"]["event_type"].ToString();
                        switch (eventType)
                        {
                        case "START_HANGOUT":
                            hangoutEvent = new VideoChatEvent(timeStamp, sender, allMessageSegments, attachmentUrl, VideoChatEventType.StartVideoChat);
                            break;

                        case "END_HANGOUT":
                            hangoutEvent = new VideoChatEvent(timeStamp, sender, allMessageSegments, attachmentUrl, VideoChatEventType.EndVideoChat);
                            break;

                        default:
                            hangoutEvent = new HangoutEvent(timeStamp, sender, allMessageSegments, attachmentUrl);
                            break;
                        }
                        break;

                    case RegularChatMessageEventTypeJToken:
                        hangoutEvent = new RegularChatMessageEvent(timeStamp, sender, allMessageSegments, attachmentUrl);
                        break;

                    case AddUserEventTypeJToken:
                        string newUserId   = innerEvent["membership_change"]["participant_id"][0]["chat_id"].ToString();
                        string newUserName = (from Participant p in hangoutParticipants where p.Id == newUserId select p.Name).DefaultIfEmpty("unknown_" + newUserId).FirstOrDefault();
                        hangoutEvent = new AddUserEvent(timeStamp, sender, allMessageSegments, attachmentUrl, new Participant(newUserId, newUserName));
                        break;

                    case RemoveUserEventTypeJToken:
                        string removedUserId   = innerEvent["membership_change"]["participant_id"][0]["chat_id"].ToString();
                        string removedUserName = (from Participant p in hangoutParticipants where p.Id == removedUserId select p.Name).DefaultIfEmpty("unknown_" + removedUserId).FirstOrDefault();
                        hangoutEvent = new RemoveUserEvent(timeStamp, sender, allMessageSegments, attachmentUrl, new Participant(removedUserId, removedUserName));
                        break;

                    case SmsEventTypeJToken:
                        hangoutEvent = new SmsEvent(timeStamp, sender, allMessageSegments, attachmentUrl);
                        break;

                    case OnTheRecordModificationEventTypeJToken:
                        hangoutEvent = new OnTheRecordModificationEvent(timeStamp, sender, allMessageSegments, attachmentUrl);
                        break;

                    case VoicemailEventTypeJToken:
                        string messageText = "new voicemail";
                        if (allMessageSegments != string.Empty)
                        {
                            messageText = $"{messageText}:{Environment.NewLine}{allMessageSegments}";
                        }
                        hangoutEvent = new VoicemailEvent(timeStamp, sender, messageText, attachmentUrl);
                        break;

                    default:
                        hangoutEvent = new HangoutEvent(timeStamp, sender, allMessageSegments, attachmentUrl);
                        break;
                    }
                    hangoutEvents.Add(hangoutEvent);
                }
                hangoutEvents.Sort((x, y) => x.TimeStamp.CompareTo(y.TimeStamp));
                hangouts.Add(new Hangout(hangoutType, hangoutName, hangoutEvents, hangoutParticipants));
            }
            hangouts.Sort((x, y) => string.Compare(x.Name, y.Name, StringComparison.Ordinal));
            return(hangouts);
        }
 /// <summary>
 /// Adds a new user to the service
 /// </summary>
 /// <param name="user">A user</param>
 public void Add(User user)
 {
     _userService.Add(user);
     AddUserEvent?.Invoke(user);
 }
 public void RaiseAddUserEvent()
 {
     AddUserEvent?.Invoke(this, EventArgs.Empty);
 }
Beispiel #7
0
 private void Apply(AddUserEvent @event)
 {
     this.Name = @event.Name;
     this.Age  = @event.Age;
     Console.WriteLine("修改:" + @event.Name + "|" + @event.Age + "|" + @event.Id);
 }