Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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();
            }
        }
Exemplo n.º 3
0
        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();
            }
        }