public TcpClientController(TraceSource trace, string ip, int port, NetworkStreamReader reader, NetworkStreamWriter writer)
        {
            if (trace == null)
            {
                throw new ArgumentNullException(nameof(trace));
            }
            if (string.IsNullOrWhiteSpace(ip))
            {
                throw new ArgumentNullException(nameof(ip));
            }
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }
            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }

            _trace  = trace;
            _ip     = ip;
            _port   = port;
            _reader = reader;
            _writer = writer;
        }
예제 #2
0
        public TcpServerController(TcpListener server, TraceSource trace, ClientStore clientStore, NetworkStreamReader reader, NetworkStreamWriter writer)
        {
            if (server == null)
            {
                throw new ArgumentNullException(nameof(server));
            }
            if (trace == null)
            {
                throw new ArgumentNullException(nameof(trace));
            }
            if (clientStore == null)
            {
                throw new ArgumentNullException(nameof(clientStore));
            }
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }
            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }

            _server      = server;
            _trace       = trace;
            _clientStore = clientStore;
            _reader      = reader;
            _writer      = writer;
        }
예제 #3
0
        private static void EstablishConnectionToMaster(String ip, int port, bool tls, List <Bundle> bundles)
        {
            int       protocolVersion = 1;
            TcpClient tcpClient       = new TcpClient(ip, port);

            streamWriter = new RSANetworkStreamWriter(tcpClient.GetStream());
            streamReader = new RSANetworkStreamReader(tcpClient.GetStream());
            ((RSANetworkStreamWriter)streamWriter).RSASubmit();

            /*if (!tls)
             * {
             *  streamWriter = new NetworkStreamWriter(tcpClient.GetStream());
             *  streamReader = new NetworkStreamReader(tcpClient.GetStream());
             * }*/
            streamWriter.Write(BitConverter.GetBytes(protocolVersion));
            streamWriter.Write(Encoding.UTF8.GetBytes("*****@*****.**"));
            streamWriter.Write(Encoding.UTF8.GetBytes("1231231"));
            streamWriter.Write(Encoding.UTF8.GetBytes("rig1"));
            streamWriter.Write(Encoding.UTF8.GetBytes("hashed1"));
            List <String> bundleNames = new List <string>();

            foreach (Bundle bundle in bundles)
            {
                bundleNames.Add(bundle.Name);
            }
            streamWriter.Write(Encoding.UTF8.GetBytes(String.Join(",", bundleNames)));
            streamWriter.Flush();
        }
예제 #4
0
    public void Update()
    {
        if (server.Pending())
        {
            clients.Add(server.AcceptTcpClient());
        }
        foreach (TcpClient client in clients)
        {
            var stream = client.GetStream();
            if (stream.DataAvailable)
            {
                byte[] buffer = NetworkStreamReader.Read(stream, client.ReceiveBufferSize);

                Mirroring(client, buffer);

                var message = restMessage + System.Text.Encoding.UTF8.GetString(buffer);
                restMessage = "";
                string[] messages = message.Split('뷁');

                for (int i = 1; i < messages.Length; ++i)
                {
                    string   msgRaw = messages[i];
                    string[] msgs   = msgRaw.Split('끊');

                    if (msgs.Length == 1)
                    {
                        restMessage = msgs[0];
                        continue;
                    }
                    string msg = msgs[0];

                    if (msg.Length == 0)
                    {
                        continue;
                    }
                    if (msg.Length == 0)
                    {
                        continue;
                    }
                    foreach (OnMessageReceived fn in onMessageReceived)
                    {
                        NetworkDecorator.NetworkMessage m = NetworkDecorator.StringToMessage(msg);
                        fn(client, m);
                        if (m.header == NetworkHeader.ClOSE)
                        {
                            removingClients.Add(client);
                        }
                    }
                }
            }
        }
        foreach (TcpClient client in removingClients)
        {
            clients.Remove(client);
        }
        removingClients.Clear();
    }
예제 #5
0
        private void AcceptSocketCallback(IAsyncResult ar)
        {
            //if (_s != null)
            //{
            //    if (_s.Connected)
            //    {
            //        //We need to get rid of the other socket before accepting this one.
            //        Restart("new incomming connection.");
            //    }
            //}

            //Accept the connection and store a pointer to the connected socket in _s
            TcpListener myListener = (TcpListener)ar.AsyncState;

            _s = myListener.EndAcceptSocket(ar);
            //myListener.Stop();
            _s.SendTimeout = _sendTimeoutInterval;  //testing to disable, result is bad, make this line remain UNcommented, works at 250

            _ns = new NetworkStream(_s);

            Debug.Print(_s.RemoteEndPoint.AddressFamily.ToString() + " has connected");

            //Start listening for data from the socket.
            _nsr                = new NetworkStreamReader(_ns, _endOfPacketChar);
            _nsr.PacketReady   += new NetworkStreamReader.PacketReadyEventHandler(_nsr_PacketReady);
            _nsr.NeedToRestart += new NetworkStreamReader.NeedToRestartEventHandler(_nsr_NeedToRestart);
            new Thread(_nsr.DoWork).Start();

            //And start the thread for sending packets
            _nss             = new NetworkStreamSender(_ns, _endOfPacketChar);
            _nss.ComFailure += new NetworkStreamSender.ComFailureEventHandler(_nss_ComFailure);
            _nss.PacketSent += new NetworkStreamSender.PacketSentEventHandler(_nss_PacketSent);
            new Thread(_nss.DoWork).Start();

            //Start the time out packet.  If the socket was not able to send this packet, the client has disconnected.
            _heartbeatTimer          = new System.Timers.Timer(_heartbeatInterval);
            _heartbeatTimer.Elapsed += new ElapsedEventHandler(_timeout_Elapsed);
            _heartbeatTimer.Start();

            //welcome message
            SendPacket("welcome");
            Debug.Print(_s.LocalEndPoint.AddressFamily.ToString());

            ServerConnectionStateChange(ConnectionState.Connected, _s.LocalEndPoint.AddressFamily.ToString() + " has connected.");
        }
예제 #6
0
    public void Update()
    {
        if (!NetworkValues.isNetwork)
        {
            return;
        }
        var stream = client.GetStream();

        if (stream.CanRead && stream.DataAvailable)
        {
            byte[] buffer = NetworkStreamReader.Read(stream, client.ReceiveBufferSize);

            var message = restMessage + System.Text.Encoding.UTF8.GetString(buffer);
            restMessage = "";
            string[] messages = message.Split('뷁');

            if (onMessageReceived.Count > 0)
            {
                for (int i = 1; i < messages.Length; ++i)
                {
                    string   msgRaw = messages[i];
                    string[] msgs   = msgRaw.Split('끊');

                    if (msgs.Length == 1)
                    {
                        restMessage = msgs[0];
                        continue;
                    }
                    string msg = msgs[0];

                    if (msg.Length == 0)
                    {
                        continue;
                    }

                    NetworkDecorator.NetworkMessage m = NetworkDecorator.StringToMessage(msg);
                    foreach (OnMessageReceived fn in onMessageReceived)
                    {
                        fn(m);
                    }
                }
            }
        }
    }