コード例 #1
0
        public juggle.Ichannel connect(String ip, short port)
        {
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

            try
            {
                s.Bind(new IPEndPoint(IPAddress.Any, 0));

                udpchannel ch = new udpchannel(s, new IPEndPoint(IPAddress.Parse(ip), port));
                ch.onDisconnect += this.onChannelDisconn;

                process_.reg_channel(ch);

                _tmp_socket_data.Add(s, new tmp_socket_data(ch));
                s.BeginReceiveFrom(_tmp_socket_data[s].recvbuf, 0, _tmp_socket_data[s].recvbuflenght, 0, ref _tmp_socket_data[s].remote_ep, new AsyncCallback(this.onRecv), s);

                return(ch);
            }
            catch (System.Net.Sockets.SocketException e)
            {
                log.log.error(new System.Diagnostics.StackFrame(true), timerservice.Tick, "System.Net.Sockets.SocketException:{0}", e);

                return(null);
            }
            catch (System.Exception e)
            {
                log.log.error(new System.Diagnostics.StackFrame(true), timerservice.Tick, "System.Exceptio:{0}", e);

                return(null);
            }
        }
コード例 #2
0
        public void disconn_channel(juggle.Ichannel ch)
        {
            udpchannel udp_ch = ch as udpchannel;

            _tmp_socket_data.Remove(udp_ch.s);
            udp_ch.s.Close();
        }
コード例 #3
0
        private void onRecv(IAsyncResult ar)
        {
            udpacceptnetworkservice service = ar.AsyncState as udpacceptnetworkservice;

            int read = listen.EndReceiveFrom(ar, ref tempRemoteEP);

            if (read > 0)
            {
                IPEndPoint sender = (IPEndPoint)tempRemoteEP;

                if (udpchannels.ContainsKey(sender.ToString()))
                {
                    udpchannel ch = udpchannels[sender.ToString()];

                    ch.recv(recvbuf, read);
                }
                else
                {
                    udpchannel ch = new udpchannel(listen, sender);
                    ch.onDisconnect += this.onChannelDisconn;

                    udpchannels.Add(sender.ToString(), ch);
                    onChannelConn(ch);

                    ch.recv(recvbuf, read);
                }
            }

            listen.BeginReceiveFrom(recvbuf, 0, recvbuflenght, 0, ref tempRemoteEP, new AsyncCallback(this.onRecv), this);
        }
コード例 #4
0
        public void ChannelDisconn(juggle.Ichannel ch)
        {
            process_.unreg_channel(ch);

            udpchannel udp_ch = ch as udpchannel;

            udpchannels.Remove(udp_ch.remote_ep.ToString());
        }
コード例 #5
0
            public tmp_socket_data(udpchannel _ch)
            {
                remote_ep     = new IPEndPoint(IPAddress.Any, 0);
                recvbuflenght = 16 * 1024;
                recvbuf       = new byte[recvbuflenght];

                ch = _ch;
            }
コード例 #6
0
        public void onChannelDisconn(juggle.Ichannel ch)
        {
            udpchannel udp_ch = ch as udpchannel;

            _tmp_socket_data.Remove(udp_ch.s);

            if (onChannelDisconnect != null)
            {
                onChannelDisconnect(ch);
            }
        }
コード例 #7
0
        public void onChannelDisconn(juggle.Ichannel ch)
        {
            if (onChannelDisconnect != null)
            {
                onChannelDisconnect(ch);
            }

            process_.unreg_channel(ch);

            udpchannel udp_ch = ch as udpchannel;

            udpchannels.Remove(udp_ch.remote_ep.ToString());
        }
コード例 #8
0
        private void onRecv(IAsyncResult ar)
        {
            udpacceptnetworkservice service = ar.AsyncState as udpacceptnetworkservice;

            try
            {
                int read = listen.EndReceiveFrom(ar, ref tempRemoteEP);
                if (read > 0)
                {
                    IPEndPoint sender = (IPEndPoint)tempRemoteEP;

                    if (udpchannels.ContainsKey(sender.ToString()))
                    {
                        udpchannel ch = udpchannels[sender.ToString()];

                        ch.recv(recvbuf, read);
                    }
                    else
                    {
                        udpchannel ch = new udpchannel(listen, sender);
                        ch.onDisconnect += this.onChannelDisconn;
                        ch.Disconnect   += ChannelDisconn;

                        udpchannels.Add(sender.ToString(), ch);
                        onChannelConn(ch);

                        ch.recv(recvbuf, read);
                    }
                }

                listen.BeginReceiveFrom(recvbuf, 0, recvbuflenght, 0, ref tempRemoteEP, new AsyncCallback(this.onRecv), this);
            }
            catch (System.Net.Sockets.SocketException)
            {
            }
            catch (System.Exception e)
            {
                log.log.error(new System.Diagnostics.StackFrame(true), timerservice.Tick, "System.Exception:{0}", e);
            }
        }