コード例 #1
0
        // Construction
        public CChatChannelConfig( string internal_name, string external_name, EPersistenceID creator_id, EChannelGameProperties properties )
        {
            InternalName = internal_name;
            ExternalName = external_name;
            CreatorID = creator_id;
            GameProperties = properties;

            ModeratorPermissions = EChannelModeratorPermissions.None;
            AllowsModeration = false;
            MaxMembers = 0;
            AnnounceJoinLeave = false;
            DestroyWhenEmpty = false;
            IsMembershipClientLocked = false;
        }
コード例 #2
0
        private EChannelJoinError Request_Join_Channel( EPersistenceID player_id, EChannelID channel_id, EChannelGameProperties remove_mask )
        {
            Remove_Player_From_Channels( player_id, remove_mask );

            CServerChatChannel channel = Get_Channel_By_Channel_ID( channel_id );
            if ( channel == null )
            {
                return EChannelJoinError.ChannelDoesNotExist;
            }

            EChannelJoinError error = channel.Join_Channel( player_id );
            if ( error == EChannelJoinError.None )
            {
                channel.Update_Moderator();
                Add_Channel_To_Player( player_id, channel_id );

                CJoinChatChannelResultMessage result_msg = new CJoinChatChannelResultMessage();
                result_msg.ChannelID = channel_id;
                result_msg.ChannelName = channel.ExternalName;
                result_msg.AnnounceJoinLeave = channel.ShouldAnnounceJoinLeave;

                channel.Members.Apply( n => result_msg.Add_Member( n ) );
                channel.Gagged.Apply( n => result_msg.Add_Gagged( n ) );

                Send_Notification_To_Channel( channel_id, player_id, EChatNotification.Player_Joined_Channel, player_id );

                if ( channel.Update_Moderator() )
                {
                    Send_Notification_To_Channel( channel.ID, channel.Moderator, EChatNotification.New_Moderator, EPersistenceID.Invalid );
                }

                result_msg.Moderator = channel.Moderator;
                Send_Message_To_Player( result_msg, player_id );
            }

            return error;
        }
コード例 #3
0
        private void Remove_Player_From_Channels( EPersistenceID player_id, EChannelGameProperties remove_mask )
        {
            CChatPlayer player = Get_Player_By_Persistence_ID( player_id );
            if ( player == null || remove_mask == EChannelGameProperties.None )
            {
                return;
            }

            List< EChannelID > remove_channels = new List< EChannelID >();

            player.Channels.Where( channel_id => ( Get_Channel_By_Channel_ID( channel_id ).GameProperties & remove_mask ) != 0 )
                                .Apply( cid => remove_channels.Add( cid ) );
            remove_channels.Apply( n => Remove_From_Channel( player_id, n, ELeftChannelReason.Swapped_By_Server, EPersistenceID.Invalid ) );
        }
コード例 #4
0
        // Helper
        private static void Change_System_Channel( EPersistenceID player_id, EChannelID new_channel_id, EChannelGameProperties remove_mask, DRequestResponseHandler response_handler )
        {
            CJoinChatChannelRequestServerMessage change_request = new CJoinChatChannelRequestServerMessage( player_id, new_channel_id, remove_mask );
            change_request.Handler = response_handler;

            CServerMessageRouter.Send_Message_To_Chat_Server( change_request );
        }
コード例 #5
0
 // Construction
 public CJoinChatChannelRequestServerMessage( EPersistenceID player_id, EChannelID channel_id, EChannelGameProperties remove_mask )
     : base()
 {
     PlayerID = player_id;
     ChannelID = channel_id;
     RemoveMask = remove_mask;
 }