//method for sending proper info private void SendInfoMessageToClient(ClientInfoType messageType, IMakaoGameClientService proxy, object dataToSend) { var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Info("Sending info to specific player in the room: " + messageType.ToString()); switch (messageType) { case ClientInfoType.PlayersDataChanged: proxy.UpdateTheCurrentListOfPlayers(); break; case ClientInfoType.ClosedByHost: proxy.RoomWasDeleted(DeletionReason.ClosedByHost); break; case ClientInfoType.PlayersReadinessChanged: proxy.UpdatePlayersGameReadinessData((ActualizedPlayersReadinessDataRequest)dataToSend); break; case ClientInfoType.JoiningTimeout: proxy.RoomWasDeleted(DeletionReason.JoiningTimeout); break; case ClientInfoType.ReadinessTimeout: proxy.RoomWasDeleted(DeletionReason.ReadinessTimeout); break; case ClientInfoType.CheckAliveness: CheckAlivenessOfPlayer(proxy); break; case ClientInfoType.LostConnectionToClient: proxy.RoomWasDeleted(DeletionReason.LostConnection); break; case ClientInfoType.PlayerLeftGame: proxy.RoomWasDeleted(DeletionReason.PlayerLeftGame); break; } }
//spread info about room removal public void DeleteTheRoom(ClientInfoType messageType) { var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Info("Start sending info about removal of room. Amount of players: " + MakaoEngineHostDataPlaceholders.PlayersData.Count.ToString()); SendInfoToAllCLients(messageType, null); }
//send info to all clients private void SendInfoToAllCLients(ClientInfoType messageType, object dataToSend) { foreach (PlayerData item in MakaoEngineHostDataPlaceholders.PlayersData) { var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Info(string.Format("Sending message of type: {0}, to player: {1} [{2}], endpoint: {3}.", messageType.ToString(), item.PlayerName, item.PlayerNumber.ToString(), item.PlayerEndpoint)); ChannelFactoryCreation(item.PlayerEndpoint, messageType, dataToSend); } }
//create new channel factory private void ChannelFactoryCreation(Uri endpoint, ClientInfoType messageType, object dataToSend) { try { ChannelFactory <IMakaoGameClientService> factory = new ChannelFactory <IMakaoGameClientService> (new BasicHttpBinding(), new EndpointAddress(endpoint)); IMakaoGameClientService proxy = factory.CreateChannel(); SendInfoMessageToClient(messageType, proxy, dataToSend); } catch (Exception ex) { var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Error("Couldn't connect to the client endpoint while sending info" + " to every current player from list: " + messageType + "; " + ex.Message); } }
public object GetClientInfo(ClientInfoType type) { if (ClientInfo != null && ClientInfo.Length > 0) { object[] info = (object[])ClientInfo[0]; if (info != null) { return info[(int)type]; } } return null; }