Example #1
0
        public void TryReadMessageTestOneLongMessage()
        {
            // Create a message to write as received in buffer
            byte[]          fakeBody       = new byte[SocketStateObject.BufferSize * 2];
            AbstractMessage messageToWrite = new BasicMessage(Guid.NewGuid(), fakeBody);
            // Prepare the received buffer
            SocketStateObject state = new SocketStateObject();
            int offset = messageToWrite.Header.Write(state.buffer, 0);
            // Call the TryRead
            AbstractMessage message  = new BasicMessage();
            int             byteRead = SocketStateObject.BufferSize;
            AbstractMessage actual   = AbstractMessage.TryReadMessage(message, state, byteRead);

            Assert.IsNull(actual);
            Assert.IsNotNull(state.message);
            Assert.IsNull(state.pendingBuffer);
            byteRead = SocketStateObject.BufferSize;
            actual   = AbstractMessage.TryReadMessage(message, state, byteRead);
            Assert.IsNull(actual);
            Assert.IsNotNull(state.message);
            Assert.IsNull(state.pendingBuffer);
            byteRead = messageToWrite.Header.HeaderLength;
            actual   = AbstractMessage.TryReadMessage(message, state, byteRead);
            Assert.IsNotNull(actual);
            Assert.AreEqual(actual.MessageLength, messageToWrite.MessageLength);
            Assert.IsNull(state.message);
            Assert.IsNull(state.pendingBuffer);
        }
Example #2
0
        private void ReceiveCallback(IAsyncResult ar)
        {
            /* retrieve the SocketStateObject */
            SocketStateObject state    = (SocketStateObject)ar.AsyncState;
            Socket            socketFd = state.m_SocketFd;

            /* read data */
            int size = socketFd.EndReceive(ar);

            if (size > 0)
            {
                state.m_StringBuilder.Append(Encoding.ASCII.GetString(state.m_DataBuf, 0, size));

                /* get the rest of the data */
                socketFd.BeginReceive(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE, 0,
                                      new AsyncCallback(ReceiveCallback), state);
            }
            else
            {
                /* all the data has arrived */
                if (state.m_StringBuilder.Length > 1)
                {
                    string result = state.m_StringBuilder.ToString();
                    result = result.Replace(",", " ");
                    result = result.Replace("\n", "\r\n");
                    setThreadedTextBox(result);
                    /* shutdown and close socket */
                    socketFd.Shutdown(SocketShutdown.Both);
                    socketFd.Close();
                }
            }
        }
Example #3
0
        private void Listener_AcceptSocketCallback(IAsyncResult ar)
        {
            Socket soc = null;

            try
            {
                soc = listener.EndAcceptSocket(ar);

                if (socketList.Count > ClientListenerMaxOpenSockets)
                {
                    ISLogger.Write("Declining connection from {0}: Max open client sockets reached", soc.RemoteEndPoint);
                    soc.Dispose();
                    return;
                }
            }catch (ObjectDisposedException)
            {
                //ISLogger.Write("AcceptSocketCallback attempted to access disposed TcpListener");
                return;
            }

            //ISLogger.Write("Accepting connection from {0}", soc.RemoteEndPoint);
            socketList.Add(soc);
            Timer             socTimer = new Timer(SocketTimeoutTimerElapsed, soc, ClientListenerSocketTimeout, Timeout.Infinite);
            SocketStateObject syncObj  = new SocketStateObject(new byte[ClientListenerSocketBufferSize], soc, socTimer, (IPEndPoint)soc.RemoteEndPoint);

            soc.BeginReceive(syncObj.Buff, 0, 4, 0, SocketReceiveCallback, syncObj);

            listener.BeginAcceptSocket(Listener_AcceptSocketCallback, null);
        }
Example #4
0
        public override void Connect()
        {
            try {
                // Debugger.Log ("socket2 begin connect");
                ReadyState = Connecting;
                var state = new SocketStateObject {
                    udpClient = _udpClient, endPoint = _endPoint
                };

                _udpClient.Connect(this._url, this._port);
                if (_udpClient.Connected())
                {
                    _kcp = new Kcp.Kcp(123, this);
                    _kcp.SetOutput(OutputKcp);

                    // fast mode
                    _kcp.NoDelay(1, 10, 2, 1);
                    _kcp.WndSize(1024, 1024);

                    Timer.SetTimer(() => StartKcpUpdate(), Config.K);

                    this.StartReceive();
                    ReadyState = Open;
                    base.onOpen();
                }
            } catch (Exception e) {
                Debugger.Log(e.ToString());
                PushError(e);
            }
        }
Example #5
0
        private void SendCallback(IAsyncResult ar)
        {
            try {
                setThreadedColor();
                /* retrieve the socket from the ar object */
                //Socket socketFd = (Socket)ar.AsyncState;

                /* end pending asynchronous send */
                int bytesSent = socketFd.EndSend(ar);
                //MessageBox.Show("Wysłano " + bytesSent.ToString() + " bajtów");

                /* create the SocketStateObject */
                SocketStateObject state = new SocketStateObject();
                state.m_SocketFd = socketFd;

                //Console.WriteLine("\t\tSent {0} bytes to the client\n\tEND connection", bytesSent);
                socketFd.BeginReceive(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE, 0, new AsyncCallback(ReceiveCallback), state);

                /* shutdown and close socket */
                //socketFd.Shutdown(SocketShutdown.Both);
                //socketFd.Close();
            } catch (Exception exc) {
                //Console.WriteLine(exc.Message.ToString());
            }
        }
Example #6
0
        //Sprawdza stan przeslanej wiadomosc do serwera, jesli odebrana cala wiadomosc, to czyta odpowiedz serwera
        private void SendCallback(IAsyncResult ar)
        {
            try
            {
                /* retrieve the SocketStateObject */
                SocketStateObject state    = (SocketStateObject)ar.AsyncState;
                Socket            socketFd = state.m_SocketFd;

                /* read data */
                socket.bytessended = socketFd.EndReceive(ar);

                if (socket.bytessended < 15)
                {
                    /* send the rest of the data */
                    socketFd.BeginSend(state.m_DataBuf, socket.bytessended, SocketStateObject.BUF_SIZE - socket.bytessended, 0, new AsyncCallback(SendCallback), state);
                }
                else
                {
                    /* all the data sended */
                    Recive();
                }
            }
            catch (Exception exc)
            {
                client.NewInfoWidnow("Serwer został rozłączony!\n");
                Application.Exit();
            }
        }
Example #7
0
        public void TryReadMessageTestTwoCompleteMessage()
        {
            // Create a message to write as received in buffer
            byte[]          fakeBody        = new byte[10];
            AbstractMessage messageToWrite1 = new BasicMessage(Guid.NewGuid(), fakeBody);
            // Prepare the received buffer
            SocketStateObject state = new SocketStateObject();
            int offset = messageToWrite1.Header.Write(state.buffer, 0);

            offset += fakeBody.Length;

            fakeBody = new byte[15];
            AbstractMessage messageToWrite2 = new BasicMessage(Guid.NewGuid(), fakeBody);

            offset  = messageToWrite2.Header.Write(state.buffer, offset);
            offset += fakeBody.Length;
            // Call the TryRead
            AbstractMessage message  = new BasicMessage();
            int             byteRead = offset;
            AbstractMessage actual   = AbstractMessage.TryReadMessage(message, state, byteRead);

            Assert.IsNotNull(actual);
            Assert.AreEqual(actual.MessageLength, messageToWrite1.MessageLength);
            Assert.IsNull(state.message);
            Assert.IsNotNull(state.pendingBuffer);
            actual = AbstractMessage.TryReadMessage(message, state, 0);
            Assert.IsNotNull(actual);
            Assert.AreEqual(actual.MessageLength, messageToWrite2.MessageLength);
            Assert.IsNull(state.message);
            Assert.IsNull(state.pendingBuffer);
        }
 private void StartReceivingThread(SocketStateObject state)
 {
     new Thread(() =>
     {
         while (state.Socket.Connected)
         {
             Receive(state).Wait();
         }
     }).Start();
 }
Example #9
0
 private void StartReceive()
 {
     try {
         var state = new SocketStateObject {
             udpClient = this._udpClient, endPoint = this._endPoint
         };
         _udpClient.BeginReceive(new AsyncCallback(ReceiveCallback), state);
     } catch (Exception e) {
         Debugger.Log(e.ToString());
     }
 }
Example #10
0
        public async Task <bool> StartListening(int port)
        {
            return(await Task.Run(async() =>
            {
                IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
                IPAddress ipAddress = ipHostInfo.AddressList[0];
                IPEndPoint localEndPoint = new IPEndPoint(ipAddress, port);

                m_ListeningSocket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

                try
                {
                    m_ListeningSocket.Bind(localEndPoint);
                    m_ListeningSocket.Listen(100);
                    Console.WriteLine($"[{Name}] Server online...");

                    while (m_Run)
                    {
                        var socket = m_ListeningSocket.Accept();
                        Console.WriteLine($"[{Name}] Client connected: " + socket.RemoteEndPoint.ToString());

                        var state = new SocketStateObject {
                            Socket = socket
                        };

                        // Need to receive proper name. First message should always be the name

                        await Receive(state);
                        state.Name = state.LastMessage;

                        // Add socket state object to the dcitionary or override the old one
                        if (m_ConnectedSockets.ContainsKey(state.Name))
                        {
                            m_ConnectedSockets[state.Name].Socket.Shutdown(SocketShutdown.Both);
                            m_ConnectedSockets[state.Name].Socket.Close();
                            m_ConnectedSockets[state.Name] = state;
                        }
                        else
                        {
                            m_ConnectedSockets.Add(state.Name, state);
                        }

                        StartReceivingThread(state);
                    }

                    return true;
                }
                catch (Exception e)
                {
                    Console.WriteLine($"[{Name}][Error] Listening soccket failed to begin accept: " + e.ToString());
                    return false;
                }
            }));
        }
Example #11
0
        private void SocketReceiveCallback(IAsyncResult ar)
        {
            SocketStateObject state = (SocketStateObject)ar.AsyncState;

            try
            {
                Socket soc     = state.Soc;
                int    bytesIn = soc.EndReceive(ar);
                int    pSize   = BitConverter.ToInt32(state.Buff, 0);

                if (pSize == 0 | bytesIn == 0)
                {
                    ISLogger.Write("Client {0} lost connection ", soc.RemoteEndPoint);
                    socketList.Remove(soc);
                    soc.Dispose();
                    state.TimeoutTimer.Dispose();
                    return;
                }


                int dRem = pSize;
                int bPos = 4;
                do
                {
                    int bIn = state.Soc.Receive(state.Buff, bPos, dRem, 0);
                    bPos += bIn;
                    dRem  = pSize - bPos + 4;
                } while (dRem > 0);

                state.TimeoutTimer.Dispose();

                MessageType cmd = (MessageType)state.Buff[4];

                if (cmd == MessageType.ClientLoginInfo)
                {
                    //ISLogger.Write("{0} sent login info", soc.RemoteEndPoint);
                    ClientLoginMessage msg = ClientLoginMessage.FromBytes(state.Buff);
                    socketList.Remove(soc);
                    ClientConnected?.Invoke(this, new ClientConnectedArgs(soc, msg.ClientName, msg.ClientGuid));
                }
                else
                {
                    ISLogger.Write("{0} sent invalid data", soc.RemoteEndPoint);
                }
            }
            catch (ObjectDisposedException) //This is fine, it just means that the socket was disposed by the timeout timer
            {
                //ISLogger.Write("ClientListener attempted to access disposed socket");
            }catch (SocketException)
            {
                //TODO
            }
        }
Example #12
0
        //Odczytuje przeslana wiadomosc od serwera, jesli jakas wiadomosc czeka w kolejce do wyslania to wysyla ja
        private void ReceiveCallback(IAsyncResult ar)
        {
            try
            {
                /* retrieve the SocketStateObject */
                SocketStateObject state    = (SocketStateObject)ar.AsyncState;
                Socket            socketFd = state.m_SocketFd;

                /* read data */
                int size = socketFd.EndSend(ar);
                socket.bytessrecived += size;
                if (socket.bytessrecived < 15)
                {
                    /* get the rest of the data */
                    socketFd.BeginReceive(state.m_DataBuf, socket.bytessended, SocketStateObject.BUF_SIZE - socket.bytessended, 0, new AsyncCallback(ReceiveCallback), state);
                }
                else
                {
                    /* all the data has arrived */
                    state.m_StringBuilder.Append(Encoding.ASCII.GetString(state.m_DataBuf, 0, size));
                    servermessage.Enqueue(state.m_StringBuilder.ToString());

                    if (clientmessage.Count == 0)
                    {
                        nowriting = true;
                    }
                    else
                    {
                        socket.bytessended = 0;
                        string mess = clientmessage.Dequeue();
                        socket.m_DataBuf = Encoding.ASCII.GetBytes(mess);

                        /* begin sending the data */
                        socket.m_SocketFd.BeginSend(socket.m_DataBuf, 0, SocketStateObject.BUF_SIZE, 0, new AsyncCallback(SendCallback), socket);
                    }
                    if (!unpacking)
                    {
                        UnpackMessage();
                    }
                }
            }
            catch (Exception exc)
            {
                client.NewInfoWidnow("Serwer został rozłączony!\n");
                Application.Exit();
            }
        }
Example #13
0
        private void AcceptCallback(IAsyncResult ar)
        {
            // Signal the main thread to continue.
            _acceptCallbackDone.Set();

            // Get the socket that handles the client request.
            var listener = (Socket)ar.AsyncState;
            try
            {
                var handler = listener.EndAccept(ar);
                SignalConnected(handler);
                var state = new SocketStateObject(handler);
                handler.BeginReceive(state.Buffer, 0, state.Buffer.Length, 0, ReadCallback, state);
            }
            catch (ObjectDisposedException)
            {
                // when the socket is closed, an ObjectDisposedException is thrown
                // by Socket.EndAccept(IAsyncResult)
            }
        }
Example #14
0
        /// <summary>
        /// Try to read a message from the buffer.
        /// </summary>
        /// <param name="message">The destination message</param>
        /// <param name="state">The state object</param>
        /// <param name="byteRead">The umber of bytes in the input buffer</param>
        /// <returns>The message read, otherwise false.</returns>
        internal static AbstractMessage TryReadMessage(AbstractMessage message, SocketStateObject state, int byteRead)
        {
            AbstractMessage messageRead = null;
            int             moreMessage = 0;

            byte[] buffer = state.buffer;    // Get buffer

            if (state.pendingBuffer != null) //Check for pending data and merge it
            {
                buffer = new byte[byteRead + state.pendingBuffer.Length];
                Array.Copy(state.pendingBuffer, 0, buffer, 0, state.pendingBuffer.Length);
                Array.Copy(state.buffer, 0, buffer, state.pendingBuffer.Length, byteRead);
                byteRead = buffer.Length;
            }
            state.pendingBuffer = null;
            if (state.message == null)
            {
                state.message = message;
                moreMessage   = state.message.ReadFirstMessage(buffer, byteRead);
                Trace.WriteLine(string.Format("Receive 1st package MessageUID {0} ClientUID {1}", state.message.MessageUID, state.message.ClientUID));
            }
            else
            {
                moreMessage = state.message.AppendBuffer(buffer, byteRead);
                Trace.WriteLine(string.Format("Receive more package MessageUID {0} ClientUID {1}", state.message.MessageUID, state.message.ClientUID));
            }
            if (state.message.IsComplete())
            {
                Trace.WriteLine(string.Format("Receive complete message {0} len {1}", state.message.MessageUID, state.message.MessageLength));
                messageRead = state.message;
                Trace.WriteLine(string.Format("Prepare to receive a new message. moreMessage = {0}", moreMessage));
                state.message = null;
                if (moreMessage > 0)
                {
                    state.pendingBuffer = new byte[byteRead - moreMessage];
                    Array.Copy(buffer, moreMessage, state.pendingBuffer, 0, state.pendingBuffer.Length);
                    Trace.WriteLine(string.Format("Copy {0} bytes to pending buffer", state.pendingBuffer.Length));
                }
            }
            return(messageRead);
        }
Example #15
0
        private void AcceptCallback(IAsyncResult ar)
        {
            // Signal the main thread to continue.
            _acceptCallbackDone.Set();

            // Get the socket that handles the client request.
            var listener = (Socket)ar.AsyncState;

            try
            {
                var handler = listener.EndAccept(ar);
                SignalConnected(handler);
                var state = new SocketStateObject(handler);
                handler.BeginReceive(state.Buffer, 0, state.Buffer.Length, 0, ReadCallback, state);
            }
            catch (ObjectDisposedException)
            {
                // when the socket is closed, an ObjectDisposedException is thrown
                // by Socket.EndAccept(IAsyncResult)
            }
        }
Example #16
0
        private void ConnectCallback(IAsyncResult ar)
        {
            /* retrieve the socket from the state object */
            Socket socketFd = (Socket)ar.AsyncState;

            /* complete the connection */
            socketFd.EndConnect(ar);

            /* send data */
            SendData(socketFd); ////////////////aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

            /* create the SocketStateObject */
            SocketStateObject state = new SocketStateObject();

            state.m_SocketFd = socketFd;


            /* begin receiving the data */
            socketFd.BeginReceive(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE, 0,
                                  new AsyncCallback(ReceiveCallback), state);

            /////////aaaaaaaaaaaaaaaaaaaaaaaaaaa
        }
Example #17
0
        //Uzyskuje socket i wysyla pierwsza wiadomosc (login)
        public void ConnectCallback(IAsyncResult ar)
        {
            try
            {
                /* retrieve the socket from the state object */
                Socket socketFd = (Socket)ar.AsyncState;

                /* complete the connection */
                socketFd.EndConnect(ar);

                /* create the SocketStateObject */
                socket            = new SocketStateObject();
                socket.m_SocketFd = socketFd;

                this.client.LoginFormEnd();
                client.setButton(client.NewGameButton, true);
                PreaperMessageCI(10, client.clientnick);
            }
            catch (Exception exc)
            {
                this.client.login.setButton(true);
                this.client.login.setLogginErrorLabel(true);
            }
        }
Example #18
0
        public void TryReadMessageTestOneLongOneShortMessage()
        {
            // Create a message to write as received in buffer
            byte[]          fakeBody        = new byte[SocketStateObject.BufferSize * 2];
            AbstractMessage messageToWrite1 = new BasicMessage(Guid.NewGuid(), fakeBody);

            fakeBody = new byte[50];
            AbstractMessage messageToWrite2 = new BasicMessage(Guid.NewGuid(), fakeBody);

            byte[] bufferToSend = new byte[messageToWrite1.MessageLength + messageToWrite2.MessageLength];
            int    offset       = messageToWrite1.Header.Write(bufferToSend, 0);

            offset += messageToWrite1.GetBuffer().Length;
            offset  = messageToWrite2.Header.Write(bufferToSend, offset);
            offset += messageToWrite2.GetBuffer().Length;
            // Read per block
            int readOffset          = 0;
            int counter             = 0;
            SocketStateObject state = new SocketStateObject();

            while (readOffset < bufferToSend.Length)
            {
                int size = ((bufferToSend.Length - readOffset) > SocketStateObject.BufferSize) ?
                           SocketStateObject.BufferSize : (bufferToSend.Length - readOffset);
                // Prepare the received buffer
                Array.Copy(bufferToSend, readOffset, state.buffer, 0, size);
                // Call the TryRead
                AbstractMessage message  = new BasicMessage();
                int             byteRead = size;
                AbstractMessage actual   = AbstractMessage.TryReadMessage(message, state, byteRead);
                switch (counter)
                {
                case 0:
                    Assert.IsNull(actual);
                    Assert.IsNotNull(state.message);
                    Assert.IsNull(state.pendingBuffer);
                    break;

                case 1:
                    Assert.IsNull(actual);
                    Assert.IsNotNull(state.message);
                    Assert.IsNull(state.pendingBuffer);
                    break;

                case 2:
                    Assert.IsNotNull(actual);
                    Assert.AreEqual(actual.MessageLength, messageToWrite1.MessageLength);
                    Assert.IsNull(state.message);
                    Assert.IsNotNull(state.pendingBuffer);
                    break;
                }
                counter++;
                readOffset += size;
            }
            AbstractMessage message2 = new BasicMessage();
            AbstractMessage actual2  = AbstractMessage.TryReadMessage(message2, state, 0);

            Assert.IsNotNull(actual2);
            Assert.AreEqual(actual2.MessageLength, messageToWrite2.MessageLength);
            Assert.IsNull(state.message);
            Assert.IsNull(state.pendingBuffer);
        }
Example #19
0
        private void AcceptCallback(IAsyncResult ar)
        {
            // Signal the main thread to continue
            _acceptCallbackDone.Set();

            // Get the socket that listens for inbound connections
            var listener = (Socket)ar.AsyncState;

            // Get the socket that handles the client request
            Socket handler;

            try
            {
                handler = listener.EndAccept(ar);
            }
            catch (ObjectDisposedException ex)
            {
                // The listener is stopped through a Dispose() call, which in turn causes
                // Socket.EndAccept(IAsyncResult) to throw an ObjectDisposedException
                //
                // Since we consider this ObjectDisposedException normal when the listener
                // is being stopped, we only write a message to stderr if the listener
                // is considered to be up and running
                if (_started)
                {
                    Console.Error.WriteLine("[{0}] Failure accepting new connection: {1}",
                                            typeof(AsyncSocketListener).FullName,
                                            ex);
                }

                return;
            }

            // Signal new connection
            SignalConnected(handler);

            lock (_syncLock)
            {
                // Register client socket
                _connectedClients.Add(handler);
            }

            var state = new SocketStateObject(handler);

            try
            {
                handler.BeginReceive(state.Buffer, 0, state.Buffer.Length, 0, ReadCallback, state);
            }
            catch (ObjectDisposedException ex)
            {
                // The listener is stopped through a Dispose() call, which in turn causes
                // Socket.BeginReceive(...) to throw an ObjectDisposedException
                //
                // Since we consider this ObjectDisposedException normal when the listener
                // is being stopped, we only write a message to stderr if the listener
                // is considered to be up and running
                if (_started)
                {
                    Console.Error.WriteLine("[{0}] Failure receiving new data: {1}",
                                            typeof(AsyncSocketListener).FullName,
                                            ex);
                }
            }
        }
Example #20
0
        private void ReceiveCallback(IAsyncResult ar)
        {
            
            try
            {
                /* retrieve the SocketStateObject */
                state = (SocketStateObject)ar.AsyncState;
                Socket socketFd = state.m_SocketFd;
                
                /* read data */
                int size = socketFd.EndReceive(ar);
                //Console.Out.WriteLine("Read data");
                
                
                if (size > 0)
                {
                    state.m_StringBuilder.Append(Encoding.ASCII.GetString(state.m_DataBuf, 0, size));
                    //reszta danych
                    
                    if (!(state.m_StringBuilder.ToString().IndexOf("<end>") > 0))
                    {
                        socketFd.BeginReceive(state.m_DataBuf, 0, state.m_DataBuf.Length, 0,
                                                 new AsyncCallback(ReceiveCallback), state);
                    }    
              }
                                 
                if(state.m_StringBuilder.ToString().IndexOf("<end>") > 0)
                {  
                    if (state.m_StringBuilder.Length > 1)
                    {
                        Console.Out.WriteLine(state.m_StringBuilder.ToString());
                        /* all the data has arrived */
                        if (state.m_StringBuilder.ToString().IndexOf("<new_message>") == 0)//znalazł wzorzec
                        {
                            
                            String tochat = state.m_StringBuilder.ToString().Remove(0, 14);
                            tochat = tochat.Remove(tochat.Length - 5, 5);
                            String roomname = tochat.Substring(tochat.IndexOf("<")+1,tochat.Length-tochat.IndexOf("<")-2);
                            tochat=tochat.Substring(0,tochat.IndexOf("<")-1);
                            
                            Boolean insideRoom = false;

                            foreach (Room room in UserInsideRooms)
                            {
                                if(room.Name==roomname)
                                {
                                    insideRoom = true;
                                    break;
                                }
                            }

                            if (insideRoom == true)
                            {

                                dodajChat(tochat);
                                setThreadedChat();
                                //Console.Out.WriteLine(ActualRoom.ChatText);
                                if (roomname != ActualRoom.Name)
                                //dodajemy powiadomienie że coś nowego
                                {
                                    
                                    foreach (Room room in Rooms)
                                    {
                                        if (roomname == room.Name)
                                        {
                                            dodajChat(tochat);
                                            room.NewMessages = IRC.Room.inside.TAK;//nowe wiadomośći w tym pokoju 
                                            break;
                                        }
                                    }
                                }
                            }

                        }
                        else if (state.m_StringBuilder.ToString().IndexOf("<room_list>") == 0)
                        {
                            String roomlist = state.m_StringBuilder.ToString().Remove(0, 11);
                            int x = 0;
                            String roomname = String.Empty;
                            int roomOccupancy = 0;
                            bool koniec = false;
                            foreach (string s in roomlist.Split('>'))
                            {
                                //Console.Out.WriteLine(s);
                                if (s == "<end")
                                { koniec = true; }
                                if (koniec == false)
                                {
                                    String s1 = s.Remove(0, 1);

                                    if (x % 2 == 0)
                                    { roomname = s1; }
                                    else { roomOccupancy = Int32.Parse(s1); }

                                    if (x % 2 != 0)
                                    {
                                        Room NewRoom = new Room(roomname, roomOccupancy);
                                        Channels.Dispatcher.BeginInvoke(new Action(delegate()
                                        {
                                            Rooms.Add(NewRoom);
                                            Channels.ItemsSource = null;
                                            Channels.ItemsSource = Rooms;
                                        }));
                                    }
                                    x++;
                                }
                            }
                       }
                        else if (state.m_StringBuilder.ToString().IndexOf("<new_room>") == 0)
                        {
                            Console.Out.WriteLine(state.m_StringBuilder.ToString());
                            String roomlist = state.m_StringBuilder.ToString().Remove(0, 10);
                            int x = 0;
                            String roomname = String.Empty;
                            int roomOccupancy = 0;
                            bool koniec = false;
                            foreach (string s in roomlist.Split('>'))
                            {
                                Console.Out.WriteLine(s);
                                if (s == "<end")
                                { koniec = true; }
                                if (koniec == false)
                                {
                                    String s1 = s.Remove(0, 1);

                                    if (x % 2 == 0)
                                    { roomname = s1; }
                                    else { roomOccupancy = Int32.Parse(s1); }
                                }
                                x++;
                            }
                            bool juzistnieje=false;

                            foreach(Room room in Rooms)
                            {
                                if(room.Name==roomname)
                                { juzistnieje = true; }
                            }

                            if(juzistnieje==false)
                            {
                            Room NewRoom = new Room(roomname, roomOccupancy);
                            
                            Channels.Dispatcher.BeginInvoke(new Action(delegate ()
                            {
                                Rooms.Add(NewRoom);
                                Channels.ItemsSource = null;
                                Channels.ItemsSource = Rooms;
                            }));
                            
                            Console.Out.WriteLine(NewRoom.Name);
                            }
                        }
                    }

                    state.m_StringBuilder.Clear(); //po odczytaniu czyścimy
                    
                    Console.Out.WriteLine("Czytam kolejną wiadomość");
                 
                    ReadData();
                    
                }
          }
            catch (Exception exc)
            {
                MessageBox.Show("Exception Receive Callback  :\t\n" + exc.Message.ToString());
                setThreadedTextBox("Wyjdź z serwera i spróbuj ponownie!");
            }
          }
	private static void recvPacket()
    {
		if (serverSocket == null || ! serverSocket.Connected) {
			setCurrentState(ConnectionState.Disconnected);
			return;
		}		
	
		SocketStateObject sso = new SocketStateObject(serverSocket, null);
		sso.socket.BeginReceive(sso.buffer, 0, sso.buffer.Length, 0, new AsyncCallback(ProcessReceive), sso);
		setCurrentState(ConnectionState.Receiving);

	}
	private static void tryConnect() {
		if (!initialized) 
			return;
		
		if (serverSocket != null) {
			
			// we need to disconnect the current connection;
			try {
				serverSocket.Shutdown(SocketShutdown.Both);
				serverSocket.Close();
			} catch (Exception e) {
				serverSocket = null;
			}
		}
		IPHostEntry ipHostInfo = Dns.Resolve(serverAddress);
		IPAddress ipAddress = ipHostInfo.AddressList[0];
        IPEndPoint remoteEP = new IPEndPoint(ipAddress,serverPort);

        // Create a TCP/IP  socket.
        serverSocket = new Socket(AddressFamily.InterNetwork, 
                SocketType.Stream, ProtocolType.Tcp );


		SocketStateObject sso = new SocketStateObject(serverSocket, null);
		serverSocket.BeginConnect(remoteEP, new AsyncCallback(ProcessConnect), sso);
		
		setCurrentState(ConnectionState.Connecting);
		
	}
	private static void sendPacket(string data)
    {
		if (serverSocket == null || ! serverSocket.Connected) {
			setCurrentState(ConnectionState.Disconnected);
			return;
		}
		
		SocketStateObject sso = new SocketStateObject(serverSocket, data + "\n\n");
		
		sso.socket.BeginSend(sso.buffer, 0, sso.buffer.Length, 0, new AsyncCallback(ProcessSend), sso);
//		Debug.Log ("Sending: " + data);
		setCurrentState(ConnectionState.Sending);
    }
Example #24
0
        /*
         *
         *      Asynchroniczna obsluga polaczenia REPConnection
         *
         */

        private void ReceiveCallbackREP(IAsyncResult ar)
        {
            try {
                /* retrieve the SocketStateObject */
                SocketStateObject state = (SocketStateObject)ar.AsyncState;
                //Socket socketFd = state.m_SocketFd;

                /* read data */
                int size = socketFdREP.EndReceive(ar);

                // dla bufora jednobajtowego
                bool end = false;
                if (state.start)
                {
                    if (state.m_DataBuf[0] != 0)
                    {
                        state.start = false;
                        setThreadedColor();
                        //MessageBox.Show(colorCount.ToString());
                    }
                }
                if (!state.start)
                {
                    setThreadedColor();
                    state.m_MemoryStream.Write(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE);
                    if (state.m_DataBuf[0] == DataConst.endInOutBufferByte)
                    {
                        state.endCounter++;
                        if (state.endCounter == DataConst.endInOutBufferSize)
                        {
                            end = true;
                        }
                    }
                    else
                    {
                        state.endCounter = 0;
                    }
                }
                if (!end)
                {
                    /* get the rest of the data */
                    socketFdREP.BeginReceive(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE, 0, new AsyncCallback(ReceiveCallbackREP), state);
                }
                else
                {
                    stopWatchREP.Stop();
                    byte[] bytes = state.m_MemoryStream.ToArray();
                    if (DataConst.DEBUG)
                    {
                    }
                    // MessageBox.Show(Conversions.BytesToStringHex(bytes));
                    /* all the data has arrived */
                    // koniec transmisji danych odbiorczych
                    if (bytes.Length > 0)
                    {
                        //MessageBox.Show(Conversions.BytesToStringHex( Conversions.CharArrayToBytes(state.m_StringBuilder.ToString().ToCharArray())));
                        fromServerBufferREP = new FromServerBuffer(bytes);

                        //MessageBox.Show(Conversions.BytesToStringHex(fromServerBufferREP.bytes));
                        //MessageBox.Show(fromServerBufferREP.serverInfo.ToString());
                        if (fromServerBufferREP.orderCode == OrderCode.eServerData)
                        {
                            setThreadedTime();
                            setThreadedInsertRow(fromServerBufferREP.serverInfo);
                        }
                        else
                        {
                            setThreadedStatusLabel("Niepoprawna odpowiedź serwera");
                        }

                        // nalezy dodac zapetlenie
                        state.m_MemoryStream = new MemoryStream();
                        state.endCounter     = 0;
                        state.start          = true;
                        socketFdREP.BeginReceive(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE, 0, new AsyncCallback(ReceiveCallbackREP), state);
                    }
                }
            } catch (Exception exc) {
                if (DataConst.DEBUG)
                {
                    MessageBox.Show("Wyjątek:\t\n" + exc.Message.ToString());
                }
                setThreadedStatusLabel("Błąd odczytu danych połaczeń z serwera");
            }
        }
Example #25
0
        private void ConnectCallback(IAsyncResult ar)
        {            
            try
            {
                /* retrieve the socket from the state object */
                socketFd = (Socket)ar.AsyncState;
                Console.Out.WriteLine("ConnectCallback");
                /* complete the connection */
                socketFd.EndConnect(ar);
                state=new SocketStateObject();
                
                state.m_SocketFd = socketFd;

                setThreadedTextBox("Czekaj, odbieranie danych z serwera!");
                Console.Out.WriteLine("Odbieranie danych");
                /* begin receiving the data */
                
                if(isConnected==false)
                {//SendDate(state, user.Nick, "<new_user>");
                isConnected = true;
                }
               ReadData();                
            }
            catch (Exception exc)
            {
                MessageBox.Show("Exception: ConnectCallback  \t\n" + exc.Message.ToString());
                setThreadedTextBox("Wyjdź z serwera i spróbuj ponownie!");
            }
        }
Example #26
0
        /*
         *
         *      Asynchroniczna obsluga polaczenia NormalConnection
         *
         */
        private void ReceiveCallback(IAsyncResult ar)
        {
            try {
                /* retrieve the SocketStateObject */
                SocketStateObject state = (SocketStateObject)ar.AsyncState;

                /* read data */

                int size = socketFd.EndReceive(ar);

                // dla bufora jednobajtowego
                bool end = false;

                if (state.m_DataBuf[0] == DataConst.endInOutBufferByte)
                {
                    state.endCounter++;
                    if (state.endCounter == DataConst.endInOutBufferSize)
                    {
                        end = true;
                    }
                }
                else
                {
                    state.endCounter = 0;
                }

                if (state.start)
                {
                    if (state.m_DataBuf[0] != 0)
                    {
                        state.start = false;
                        setThreadedColor();
                        //MessageBox.Show(colorCount.ToString());
                    }
                }
                if (!state.start)
                {
                    setThreadedColor();
                    state.m_MemoryStream.Write(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE);
                    if (state.m_DataBuf[0] == DataConst.endInOutBufferByte)
                    {
                        state.endCounter++;
                        if (state.endCounter == DataConst.endInOutBufferSize)
                        {
                            end = true;
                        }
                    }
                    else
                    {
                        state.endCounter = 0;
                    }
                }

                if (!end)
                {
                    /* get the rest of the data */
                    socketFd.BeginReceive(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE, 0, new AsyncCallback(ReceiveCallback), state);
                }
                else
                {
                    stopWatch.Stop();
                    /* all the data has arrived */
                    // koniec transmisji danych odbiorczych
                    byte[] bytes = state.m_MemoryStream.ToArray();
                    if (DataConst.DEBUG)
                    {
                        MessageBox.Show(Conversions.BytesToStringHex(bytes));
                    }
                    if (bytes.Length > 0)
                    {
                        setThreadedConnectionTime((int)stopWatch.ElapsedMilliseconds);
                        fromServerBuffer = new FromServerBuffer(bytes);
                        switch (fromServerBuffer.orderCode)
                        {
                        case OrderCode.eMaxPing: {
                            if (fromServerBuffer.orderResponse == 0)
                            {
                                setThreadedStatusLabel("Aktualizowano maksymalny ping do " + toServerBuffer.maxPing + " ms");
                            }
                            else
                            {
                                setThreadedStatusLabel("Błąd podczas ustawienia maksymalnego pingu " + toServerBuffer.maxPing);
                            }
                        } break;

                        // //TODO obsluga startu watku odbierania danych
                        case OrderCode.eLogin: {
                            if (fromServerBuffer.orderResponse == 0)
                            {
                                setThreadedStatusLabel("Logowanie zakończone po " + stopWatch.ElapsedMilliseconds.ToString() + " ms");
                                if (this.InvokeRequired)
                                {
                                    this.Invoke((MethodInvoker) delegate
                                        {
                                            this.timerDelayInfo.Enabled = true;
                                        });
                                }
                            }
                            else
                            {
                                setThreadedStatusLabel("Błąd podczas logowania");
                            }
                        }
                        break;

                        // zakonczono testy
                        case OrderCode.eLogout: {
                            //CloseREP();
                            if (fromServerBuffer.orderResponse == 0)
                            {
                                if (this.InvokeRequired)
                                {
                                    this.Invoke((MethodInvoker) delegate {
                                            CloseREP();
                                            this.Close();
                                        });
                                }
                            }
                            else
                            {
                                setThreadedStatusLabel("Błąd podczas wylogowania");
                            }
                        }
                        break;

                        case OrderCode.eAddServer: {
                            if (fromServerBuffer.orderResponse == 0)
                            {
                                setThreadedStatusLabel("Dodano serwer " + oPDomain + " o porcie " + oPPort);
                            }
                            else
                            {
                                setThreadedStatusLabel("Błąd podczas dodania serwera " + oPDomain + " o porcie " + oPPort);
                            }
                        } break;

                        case OrderCode.eDeleteServer: {
                            if (fromServerBuffer.orderResponse == 0)
                            {
                                setThreadedStatusLabel("Usunięto serwer " + oPDomain + " o porcie " + oPPort);
                                setThreadedClearDataRecords();
                            }
                            else
                            {
                                setThreadedStatusLabel("Błąd podczas usuwania serwera " + oPDomain + " o porcie " + oPPort);
                            }
                        } break;

                        case OrderCode.eDeleteAllServers: {
                            if (fromServerBuffer.orderResponse == 0)
                            {
                                setThreadedStatusLabel("Usunięto wszystkie serwery");
                                setThreadedClearDataRecords();
                            }
                            else
                            {
                                setThreadedStatusLabel("Błąd podczas usuwania wszystkich serwerow");
                            }
                        }
                        break;

                        default: {
                            setThreadedStatusLabel("Niepoprawna odpowiedź serwera");
                        } break;
                        }


                        /* shutdown and close socket */
                        try {
                            socketFd.Shutdown(SocketShutdown.Both);
                            socketFd.Close();
                        } catch { }
                    }
                }
            } catch (Exception exc) {
                //MessageBox.Show("Wyjątek:\t\n" + exc.Message.ToString());
                setThreadedStatusLabel("Błąd odczytu danych z serwera");
            }
        }
Example #27
0
 public void SendDate(SocketStateObject state,String text,String co)
 {
     try
     {
         //this.state = state;
         //state.m_DataBuf = Encoding.ASCII.GetBytes(String.Empty);
         /* wstaw stringa do bufora */
        
  //       state.m_DataBuf = Encoding.ASCII.GetBytes(co + text + "<end>");
         
         //Console.Out.WriteLine(Encoding.ASCII.GetString(state.m_DataBuf, 0, state.m_DataBuf.Length));
         setThreadedTextBox("Wszystko OK!");
         /* begin sending the date */
      //   state.m_SocketFd.BeginSend(state.m_DataBuf, 0, state.m_DataBuf.Length, 0, 
      //                      new AsyncCallback(SendCallback), state.m_SocketFd);
         //state.m_DataBuf = Encoding.ASCII.GetBytes(String.Empty);
    //     setThreadedMessage(String.Empty);
     }
     catch (Exception exc)
     {
         Console.WriteLine("Send Data exception, "+exc.Message.ToString());
     }
 }
Example #28
0
        /*
         *
         *      Asynchroniczna obsluga polaczenia
         *
         */
        private void ReceiveCallback(IAsyncResult ar)
        {
            try {
                /* retrieve the SocketStateObject */
                SocketStateObject state = (SocketStateObject)ar.AsyncState;
                //Socket socketFd = state.m_SocketFd;

                /* read data */
                int size = socketFd.EndReceive(ar);

                // dla bufora jednobajtowego
                bool end = false;

                state.m_MemoryStream.Write(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE);
                if (state.m_DataBuf[0] == DataConst.endInOutBufferByte)
                {
                    state.endCounter++;
                    if (state.endCounter == DataConst.endInOutBufferSize)
                    {
                        end = true;
                    }
                }
                else
                {
                    state.endCounter = 0;
                }

                if (!end)
                {
                    //state.m_MemoeyStream.Append(Encoding.u .GetString(state.m_DataBuf, 0, size));

                    /* get the rest of the data */
                    socketFd.BeginReceive(state.m_DataBuf, 0, SocketStateObject.BUF_SIZE, 0, new AsyncCallback(ReceiveCallback), state);
                }
                else
                {
                    stopWatch.Stop();

                    byte[] bytes = state.m_MemoryStream.ToArray();
                    if (DataConst.DEBUG)
                    {
                        MessageBox.Show(Conversions.BytesToStringHex(bytes));
                    }
                    /* all the data has arrived */
                    // koniec transmisji danych odbiorczych
                    if (bytes.Length > 0)
                    {
                        fromServerBuffer = new FromServerBuffer(bytes);
                        if (fromServerBuffer.orderCode == OrderCode.eConnection)
                        {
                            setThreadedConnectButton(true);
                            setThreadedStatusLabel("Test zakończony pomyślnie po " + stopWatch.ElapsedMilliseconds.ToString() + " ms");
                        }
                        else
                        {
                            setThreadedConnectButton(true);
                            setThreadedStatusLabel("Niepoprawna odpowiedź serwera");
                        }
                        //MessageBox.Show(Conversions.BytesToStringHex(fromServerBuffer.bytes));
                        /* shutdown and close socket */


                        socketFd.Shutdown(SocketShutdown.Both);
                        socketFd.Close();
                    }
                }
            } catch (Exception exc) {
                if (DataConst.DEBUG)
                {
                    MessageBox.Show("Wyjątek:\t\n" + exc.Message.ToString());
                }
                setThreadedStatusLabel("Błąd odczytu danych z serwera");
                setThreadedConnectButton(false);
            }
        }