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); }
private void RPCPublishRoomEvent(IRoomEvent pub) { _messageBroker.Publish(pub); }