Exemple #1
0
        public void PublishRoomEvent(IRoomEvent pub)
        {
            if (!_photonView.isMine)
            {
                return;
            }

            _photonView.RPC(RPCDefine.SystemRPC.GetRPCMethod(RPCDefine.SystemRPC.RPCEnum.PublishRoomEvent), PhotonTargets.All, pub);
        }
        /// <summary>
        /// This method is intended for the API only.
        /// If a Room receives a new event, process it in here.
        /// </summary>
        /// <param name="roomEvent">New event</param>
        public void FeedEvent(IRoomEvent roomEvent)
        {
            if (roomEvent == null)
            {
                throw new ArgumentNullException(nameof(roomEvent));
            }

            if (roomEvent.Content == null)
            {
                return; // We can't operate on this
            }
            switch (roomEvent)
            {
            case StateEvent <RoomAvatarContent> avatarStateEvent:
                break;

            case StateEvent <RoomCanonicalAliasContent> canonicalAliasStateEvent:
                CanonicalAlias = canonicalAliasStateEvent.Content.Alias;
                Aliases        = canonicalAliasStateEvent.Content.AlternateAliases;
                break;

            case StateEvent <RoomCreateContent> createStateEvent:
                Creator        = createStateEvent.Content.Creator;
                ShouldFederate = createStateEvent.Content.Federate;
                break;

            case StateEvent <RoomGuestAccessContent> guestAccessStateEvent:
                break;

            case StateEvent <RoomHistoryVisibilityContent> historyVisibilityStateEvent:
                break;

            case StateEvent <RoomJoinRulesContent> joinRuleStateEvent:
                JoinRule = joinRuleStateEvent.Content.JoinRule;
                break;

            case StateEvent <RoomMembershipContent> membershipStateEvent:
                //if (!_api.Sync.IsInitialSync)
                //{
                //    //Handle new join,leave etc
                //    RoomMembershipEventDelegate eventDelegate = null;
                //    switch (membershipStateEvent.Content.MembershipState)
                //    {
                //        case MembershipState.Invite:
                //            eventDelegate = OnUserInvited;
                //            break;
                //        case MembershipState.Join:
                //            eventDelegate = Members.ContainsKey(membershipStateEvent.StateKey)
                //                ? OnUserChange
                //                : OnUserJoined;
                //            break;
                //        case MembershipState.Leave:
                //            eventDelegate = OnUserLeft;
                //            break;
                //        case MembershipState.Ban:
                //            eventDelegate = OnUserBanned;
                //            break;
                //        case MembershipState.Knock:
                //            break;
                //        default:
                //            throw new IndexOutOfRangeException(nameof(membershipStateEvent.Content.MembershipState));
                //    }

                //    eventDelegate?.Invoke(membershipStateEvent.StateKey, membershipStateEvent.Content);
                //}

                //Members[membershipStateEvent.StateKey] = membershipStateEvent.Content;
                break;

            case StateEvent <RoomNameContent> nameStateEvent:
                break;

            case StateEvent <RoomPinnedEventsContent> pinnedEventsStateEvent:
                break;

            case StateEvent <RoomPowerLevelsContent> powerLevelsStateEvent:
                break;

            case StateEvent <RoomServerAclContent> serverAclStateEvent:
                break;

            case StateEvent <RoomThirdPartyInviteContent> thirdPartyInviteStateEvent:
                break;

            case StateEvent <RoomTombstoneContent> tombstoneStateEvent:
                break;

            case StateEvent <RoomTopicContent> topicStateEvent:
                break;
            }
//            if (t == typeof(MatrixMRoomCreate))
//            {
//                var create = (MatrixMRoomCreate) roomEvent.Content;
//                Creator = create.Creator;
//                ShouldFederate = create.Federated;
//            }
//            else if (t == typeof(MatrixMRoomName))
//            {
//                Name = ((MatrixMRoomName) roomEvent.Content).Name;
//            }
//            else if (t == typeof(MatrixMRoomTopic))
//            {
//                Topic = ((MatrixMRoomTopic) roomEvent.Content).Topic;
//            }
//            else if (t == typeof(MatrixMRoomPowerLevels))
//            {
//                PowerLevels = (MatrixMRoomPowerLevels) roomEvent.Content;
//            }
//            else if (typeof(MatrixMRoomMessage).IsAssignableFrom(t))
//            {
//                _messages.Add((MatrixMRoomMessage) roomEvent.Content);
//                if (OnMessage != null)
//                    if (MessageMaximumAge <= 0 || roomEvent.Age <= MessageMaximumAge)
//                        try
//                        {
//                            OnMessage.Invoke(this, roomEvent);
//                        }
//                        catch (Exception e)
//                        {
//#if DEBUG
//                            Console.WriteLine("A OnMessage handler failed");
//                            Console.WriteLine(e);
//                            throw;
//#endif
//                        }
//            }

            OnEvent?.Invoke(this, roomEvent);
        }
Exemple #3
0
 private void RPCPublishRoomEvent(IRoomEvent pub)
 {
     _messageBroker.Publish(pub);
 }