Beispiel #1
0
 public virtual StatusResponse GetStatusMessage(StatusRequestBody body) =>
 GetStatusResponse(GetResponse(body, providerStatusUrl));
Beispiel #2
0
 public virtual StatusResponse GetStatusMessage(StatusRequestBody body, out string resultResponse)
 {
     resultResponse = GetResponse(body, providerStatusUrl);
     return(GetStatusResponse(resultResponse));
 }
Beispiel #3
0
        //main wotk method
        private void WorkingThread()
        {
            try
            {
                _listener = new TcpListener(IPAddress.Any, Port);
                _listener.Start();

                //Listener started - now in WaitingDwg state
                State = DwgSmsServerState.WaitingDwg;


                _listenSocket = _listener.AcceptSocket();
                //Dwg just connected with socket. Now starting to exchange packets
                State = DwgSmsServerState.Connecting;

                while (true)
                {
                    byte[] buffer = new byte[_listenSocket.ReceiveBufferSize];
                    int    size   = _listenSocket.Receive(buffer);

                    DwgMessage msg = new DwgMessage(buffer);

                    Console.WriteLine(msg);

                    if (msg.Header.Type == DwgMessageType.AuthenticationRequest)
                    {
                        AuthenticationRequestBody body = msg.Body as AuthenticationRequestBody;
                        if (body.User == User)
                        {
                            if (body.Password == Password)
                            {
                                _macAddress = msg.Header.Mac;

                                SendToDwg(new AuthenticationResponseBody(DwgMessageResult.Succeed));
                            }
                            else
                            {
                                Error(string.Format("Wrong password. Expected: {0}; Recieved: {1}", Password, body.Password));
                                Stop();
                            }
                        }
                        else
                        {
                            Error(string.Format("Wrong user. Expected: {0}; Recieved: {1}", User, body.User));
                            Stop();
                        }
                    }

                    if (msg.Header.Type == DwgMessageType.StatusRequest)
                    {
                        SendToDwg(new StatusResponseBody(DwgMessageResult.Succeed));

                        StatusRequestBody body = msg.Body as StatusRequestBody;

                        PortsCount    = body.PortsCount;
                        PortsStatuses = new ReadOnlyCollection <DwgPortStatus>(body.PortsStatuses);
                    }

                    if (msg.Header.Type == DwgMessageType.CsqRssiRequest)
                    {
                        SendToDwg(new CsqRssiResponseBody(DwgMessageResult.Succeed));

                        //if this is first csq rssi message - then from this moment we connected
                        if (State == DwgSmsServerState.Connecting)
                        {
                            State = DwgSmsServerState.Connected;
                        }
                    }

                    if (msg.Header.Type == DwgMessageType.SendSmsResponse)
                    {
                        SendSmsResponseBody body = msg.Body as SendSmsResponseBody;
                        _sendSmsResult = body.Result;

                        //signal to SendSms method, that response recieved
                        _sendSmsEvent.Set();
                    }

                    if (msg.Header.Type == DwgMessageType.SendSmsResultRequest)
                    {
                        SendToDwg(new SendSmsResultResponseBody(DwgMessageResult.Succeed));

                        SendSmsResultRequestBody body = msg.Body as SendSmsResultRequestBody;
                        SmsSendingResult(body.Port, body.Number, body.Result, body.CountOfSlices, body.SucceededSlices);
                    }

                    if (msg.Header.Type == DwgMessageType.SendUssdResponse)
                    {
                        SendUssdResponseBody body = msg.Body as SendUssdResponseBody;
                        _sendUssdResult = body.Result;

                        //signal to SendUssd method, that response recieved
                        _sendUssdEvent.Set();
                    }

                    if (msg.Header.Type == DwgMessageType.ReceiveUssdMessageRequest)
                    {
                        SendToDwg(new ReceiveUssdMessageResponseBody(DwgMessageResult.Succeed));

                        ReceiveUssdMessageRequestBody body = msg.Body as ReceiveUssdMessageRequestBody;
                        UssdSendingResult(body.Port, body.Status, body.Content);
                    }

                    if (msg.Header.Type == DwgMessageType.ReceiveSmsMessageRequest)
                    {
                        SendToDwg(new ReceiveSmsMessageResponseBody(DwgMessageResult.Succeed));

                        ReceiveSmsMessageRequestBody body = msg.Body as ReceiveSmsMessageRequestBody;
                        SmsReceieved(body.Port, body.DateTime, body.Number, body.Content);
                    }

                    if (msg.Header.Type == DwgMessageType.ReceiveSmsReceiptRequest)
                    {
                        SendToDwg(new ReceiveSmsReceiptResponseBody(DwgMessageResult.Succeed));

                        ReceiveSmsReceiptRequestBody body = msg.Body as ReceiveSmsReceiptRequestBody;
                        SmsReceipt(body.Port, body.DateTime, body.Number, body.ReceiptId, body.State);
                    }

                    if (msg.Header.Type == DwgMessageType.KeepAlive)
                    {
                        SendToDwg(new KeepAliveBody());
                    }
                }
            }
            catch (ThreadAbortException)
            {
                _listenSocket.Close();
                _listener.Stop();
            }
        }