// 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; }
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; }
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 ) ); }
// 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 ); }
// Construction public CJoinChatChannelRequestServerMessage( EPersistenceID player_id, EChannelID channel_id, EChannelGameProperties remove_mask ) : base() { PlayerID = player_id; ChannelID = channel_id; RemoveMask = remove_mask; }