private void SendMessageTo(TcpClientInfo tcpClientInfo, Message message) { if (status == ConnectionStatus.CLOSED || tcpClientInfo.status == ConnectionStatus.CLOSED) { return; } message.sender = config.Name; byte[] data = message.GetRaw(); try { tcpClientInfo.tcpclient.Client.Send(data, 0, data.Length, SocketFlags.None); } catch (Exception e) { if (e is SocketException) { Logger.Log("Socket cannot be written to", e.ToString()); } else if (e is ObjectDisposedException) { Logger.Log("Socket is already closed", e.ToString()); } else { Logger.Log("Unexpected error", e.ToString()); } Shutdown(); return; } }
private void Listen(IAsyncResult ar) { if (status == ConnectionStatus.CLOSED) { return; } var server = ar.AsyncState as TcpListener; try { var new_client = new TcpClientInfo(server.EndAcceptTcpClient(ar)); clients.Add(new_client); server.BeginAcceptTcpClient(Listen, server); } catch (SocketException e) { Logger.Log("Socket cannot be read from", e.ToString()); Shutdown(); } catch (ObjectDisposedException e) { Logger.Log("Socket is already closed", e.ToString()); Shutdown(); } }
public void Join() { TcpClientInfo new_client = null; try { new_client = new TcpClientInfo(new TcpClient(config.IP, config.Port)) { status = ConnectionStatus.HOSTING }; clients.Add(new_client); SetProperty(ref status, ConnectionStatus.JOINED, new List <string>() { "CanJoin", "CanHost", "CanLeave" }); } catch (Exception e) { if (e is ArgumentNullException || e is ArgumentOutOfRangeException) { Logger.Log("Invalid port", e.ToString()); } else if (e is SocketException) { Logger.Log("Socket cannot be opened", e.ToString()); } else { Logger.Log("Unexpected error", e.ToString()); } Shutdown(); return; } var receiveObject = new ReceiveObject() { tcpclientinfo = new_client }; try { new_client.tcpclient.Client.BeginReceive(receiveObject.buffer, 0, ReceiveObject.BufferSize, SocketFlags.None, Receive, receiveObject); } catch (Exception e) { if (e is ArgumentNullException || e is ArgumentOutOfRangeException) { Logger.Log("Invalid port", e.ToString()); } else if (e is SocketException) { Logger.Log("Socket cannot be read from", e.ToString()); } else if (e is ObjectDisposedException) { Logger.Log("Socket is already closed", e.ToString()); } else { Logger.Log("Unexpected error", e.ToString()); } Shutdown(); } }