コード例 #1
0
ファイル: Program.cs プロジェクト: gywerd/ClientServer
            /// <summary>
            /// Method, that analyze the request and generate requested data
            /// </summary>
            /// <param name="ar">IAsyncResult</param>
            public static void ReadCallback(IAsyncResult ar)
            {
                String          content = String.Empty;
                ClassWebService CWS     = new ClassWebService();
                DollarRates     CDR     = CWS.GetCurrencyFromOpenExchangeRate();


                // Retrieve the state object and the handler socket
                // from the asynchronous state object.
                StateObject state   = (StateObject)ar.AsyncState;
                Socket      handler = state.workSocket;

                // Read data from the client socket.
                int bytesRead = handler.EndReceive(ar);

                if (bytesRead > 0)
                {
                    // There  might be more data, so store the data received so far.
                    state.sb.Append(Encoding.ASCII.GetString(
                                        state.buffer, 0, bytesRead));

                    // Check for end-of-file tag. If it is not there, read
                    // more data.
                    content = state.sb.ToString();
                    if (content.IndexOf("<EOF>") > -1)
                    {
                        // All the data has been read from the
                        // client. Display it on the console.
                        Console.WriteLine("Read {0} bytes from socket. \n Data : {1}",
                                          content.Length, content);
                        // Echo requested data back to the client.
                        if (content == "OE<EOF>")
                        {
                            string response = RateListToString(CDR);
                            Send(handler, response);
                        }
                        else if (content.IndexOf("<EOF>") == 3)
                        {
                            string country  = content.Substring(0, 3);
                            string response = CDR.GetRateFromCountryCode(country);
                            Send(handler, response);
                        }
                        // Echo the data back to the client.
                        else
                        {
                            Send(handler, content);
                        }
                    }
                    else
                    {
                        // Not all data received. Get more.
                        handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
                                             new AsyncCallback(ReadCallback), state);
                    }
                }
            }
コード例 #2
0
ファイル: Program.cs プロジェクト: gywerd/ClientServer
            /// <summary>
            /// Method, that converts a Rates Dicttionary into a Semicolon separated string
            /// </summary>
            /// <param name="CDR">DollarRates</param>
            /// <returns>string</returns>
            private static string RateListToString(DollarRates CDR)
            {
                string sdr = "";

                foreach (var item in CDR.rates)
                {
                    sdr += item.Key + ";" + item.Value.ToString() + ";";
                }
                string result = sdr.Remove(sdr.ToString().LastIndexOf(";"), 1);

                return(result);
            }