public void MessageReceived(ChannelMessage msg) { switch (msg.Type) { default: Log("Unknown message: " + msg); break; case MessageType.HelloResponse: { var response = (HelloResponse)msg; if (!SeenHello) { SeenHello = true; Log(response.MachineName + " connected to " + Environment.MachineName); OnConnected(response.MachineName); } } break; case MessageType.ListenResponse: { var response = (ListenResponse)msg; ClientListener listener = null; lock (clientListeners) { if (clientListeners.ContainsKey(response.ListenIndex)) { listener = clientListeners[response.ListenIndex]; } } if (listener != null) { listener.ListenResponse(response); } } break; case MessageType.AcceptRequest: { var request = (AcceptRequest)msg; ClientListener listener = null; lock (clientListeners) { if (clientListeners.ContainsKey(request.ListenIndex)) { listener = clientListeners[request.ListenIndex]; } } if (listener != null) { listener.AcceptRequest(request); } } break; case MessageType.ConnectResponse: ((ConnectResponse)msg).Process(this); break; case MessageType.StreamData: ((StreamData)msg).Process(this); break; case MessageType.StreamError: { var error = (StreamError)msg; ClientListener listener = null; lock (clientListeners) { if (clientListeners.ContainsKey(error.StreamIndex)) { listener = clientListeners[error.StreamIndex]; } } if (listener != null) { listener.StreamError(error); } else { ((StreamError)msg).Process(this); } } break; } }