internal void ProcessInternalMessage(InternalMessage message) { switch (message.MessageType) { case InternalMessageType.ClientList: StringReader reader = new StringReader(message.Content); string client; while ((client = reader.ReadLine()) != null) { AddConnectableClient(client); } break; case InternalMessageType.ClientConnected: AddConnectableClient(message.Content, onClientConnected); break; case InternalMessageType.ClientDisconnected: ConnectableClients = ConnectableClients.Remove(message.Content); onClientDisconnected?.Invoke(message.Content); parent.onRemoteHostDisconnected?.Invoke(); break; case InternalMessageType.RegistrationRequest: parent.remoteHostName.Value = message.Sender; break; case InternalMessageType.ConnectionRequest: parent.onRemoteJoinedHostName.Value = message.Content; break; case InternalMessageType.BroacastRequest: short setBroadcastedType = short.Parse(message.Content); switch (setBroadcastedType) { case (short)BroadcastSettingCodes.Cancel: broadcastedType.Value = EMPTY_BROADCASTED_TYPE; broadcastEverything.Value = false; break; case (short)BroadcastSettingCodes.BroadcastEverythingTrue: broadcastEverything.Value = true; break; case (short)BroadcastSettingCodes.BroadcastEverythingFalse: broadcastEverything.Value = false; break; default: broadcastedType.Value = setBroadcastedType; break; } break; default: break; } }
private void AddConnectableClient(string clientDescription, Action <string> onSuccessAction) { string[] tokens = clientDescription.Split('@'); if (tokens.Length != 2 || !IPAddress.TryParse(tokens[1], out IPAddress ipAddress)) { throw new FormatException("Invalid format of connectable client."); } ConnectableClients = ConnectableClients.Add(tokens[0], remoteEndPointFactory.Create(ipAddress)); onSuccessAction?.Invoke(tokens[0]); }